最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Pandas處理時(shí)間序列數(shù)據(jù)Time Series詳解

 更新時(shí)間:2025年11月19日 08:56:42   作者:2501_94123589  
SQLAlchemy是Python中最流行的ORM(對(duì)象關(guān)系映射)框架之一,它提供了高效且靈活的數(shù)據(jù)庫(kù)操作方式,本文將介紹如何使用SQLAlchemy ORM進(jìn)行數(shù)據(jù)庫(kù)操作,有需要的可以了解下

安裝

pip install sqlalchemy

如果需要連接特定數(shù)據(jù)庫(kù),還需安裝相應(yīng)的驅(qū)動(dòng)程序:

# PostgreSQL
pip install psycopg2-binary

# MySQL
pip install mysql-connector-python

# SQLite (Python標(biāo)準(zhǔn)庫(kù)已包含,無需額外安裝)

核心概念

  • Engine:數(shù)據(jù)庫(kù)連接的引擎,負(fù)責(zé)與數(shù)據(jù)庫(kù)通信
  • Session:數(shù)據(jù)庫(kù)會(huì)話,管理所有持久化操作
  • Model:數(shù)據(jù)模型類,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表
  • Query:查詢對(duì)象,用于構(gòu)建和執(zhí)行數(shù)據(jù)庫(kù)查詢

連接數(shù)據(jù)庫(kù)

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 創(chuàng)建數(shù)據(jù)庫(kù)連接引擎
# SQLite示例
engine = create_engine('sqlite:///example.db', echo=True)

# PostgreSQL示例
# engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')

# MySQL示例
# engine = create_engine('mysql+mysqlconnector://username:password@localhost:3306/mydatabase')

# 創(chuàng)建會(huì)話工廠
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 創(chuàng)建會(huì)話實(shí)例
session = SessionLocal()

定義數(shù)據(jù)模型

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base

# 創(chuàng)建基類
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(50), nullable=False)
    email = Column(String(100), unique=True, index=True)
    
    # 定義一對(duì)多關(guān)系
    posts = relationship("Post", back_populates="author")
    
class Post(Base):
    __tablename__ = 'posts'
    
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String(100), nullable=False)
    content = Column(String(500))
    author_id = Column(Integer, ForeignKey('users.id'))
    
    # 定義多對(duì)一關(guān)系
    author = relationship("User", back_populates="posts")
    
    # 定義多對(duì)多關(guān)系(通過關(guān)聯(lián)表)
    tags = relationship("Tag", secondary="post_tags", back_populates="posts")

class Tag(Base):
    __tablename__ = 'tags'
    
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(30), unique=True, nullable=False)
    
    posts = relationship("Post", secondary="post_tags", back_populates="tags")

# 關(guān)聯(lián)表(用于多對(duì)多關(guān)系)
class PostTag(Base):
    __tablename__ = 'post_tags'
    
    post_id = Column(Integer, ForeignKey('posts.id'), primary_key=True)
    tag_id = Column(Integer, ForeignKey('tags.id'), primary_key=True)

創(chuàng)建數(shù)據(jù)庫(kù)表

# 創(chuàng)建所有表
Base.metadata.create_all(bind=engine)

# 刪除所有表
# Base.metadata.drop_all(bind=engine)

基本CRUD操作

創(chuàng)建數(shù)據(jù)

# 創(chuàng)建新用戶
new_user = User(name="張三", email="zhangsan@example.com")
session.add(new_user)
session.commit()

# 批量創(chuàng)建
session.add_all([
    User(name="李四", email="lisi@example.com"),
    User(name="王五", email="wangwu@example.com")
])
session.commit()

讀取數(shù)據(jù)

# 獲取所有用戶
users = session.query(User).all()

# 獲取第一個(gè)用戶
first_user = session.query(User).first()

# 根據(jù)ID獲取用戶
user = session.query(User).get(1)

更新數(shù)據(jù)

# 查詢并更新
user = session.query(User).get(1)
user.name = "張三四"
session.commit()

# 批量更新
session.query(User).filter(User.name.like("張%")).update({"name": "張氏"}, synchronize_session=False)
session.commit()

刪除數(shù)據(jù)

# 查詢并刪除
user = session.query(User).get(1)
session.delete(user)
session.commit()

# 批量刪除
session.query(User).filter(User.name == "李四").delete(synchronize_session=False)
session.commit()

查詢數(shù)據(jù)

基本查詢

# 獲取所有記錄
users = session.query(User).all()

# 獲取特定字段
names = session.query(User.name).all()

# 排序
users = session.query(User).order_by(User.name.desc()).all()

# 限制結(jié)果數(shù)量
users = session.query(User).limit(10).all()

# 偏移量
users = session.query(User).offset(5).limit(10).all()

過濾查詢

from sqlalchemy import or_

# 等值過濾
user = session.query(User).filter(User.name == "張三").first()

# 模糊查詢
users = session.query(User).filter(User.name.like("張%")).all()

# IN查詢
users = session.query(User).filter(User.name.in_(["張三", "李四"])).all()

# 多條件查詢
users = session.query(User).filter(
    User.name == "張三", 
    User.email.like("%@example.com")
).all()

# 或條件
users = session.query(User).filter(
    or_(User.name == "張三", User.name == "李四")
).all()

# 不等于
users = session.query(User).filter(User.name != "張三").all()

聚合查詢

from sqlalchemy import func

# 計(jì)數(shù)
count = session.query(User).count()

# 分組計(jì)數(shù)
user_post_count = session.query(
    User.name, 
    func.count(Post.id)
).join(Post).group_by(User.name).all()

# 求和、平均值等
avg_id = session.query(func.avg(User.id)).scalar()

連接查詢

# 內(nèi)連接
results = session.query(User, Post).join(Post).filter(Post.title.like("%Python%")).all()

# 左外連接
results = session.query(User, Post).outerjoin(Post).all()

# 指定連接條件
results = session.query(User, Post).join(Post, User.id == Post.author_id).all()

關(guān)系操作

# 創(chuàng)建帶關(guān)系的對(duì)象
user = User(name="趙六", email="zhaoliu@example.com")
post = Post(title="我的第一篇博客", content="Hello World!", author=user)
session.add(post)
session.commit()

# 通過關(guān)系訪問
print(f"文章 '{post.title}' 的作者是 {post.author.name}")
print(f"用戶 {user.name} 的所有文章:")
for p in user.posts:
    print(f"  - {p.title}")

# 多對(duì)多關(guān)系操作
python_tag = Tag(name="Python")
sqlalchemy_tag = Tag(name="SQLAlchemy")

post.tags.append(python_tag)
post.tags.append(sqlalchemy_tag)
session.commit()

print(f"文章 '{post.title}' 的標(biāo)簽:")
for tag in post.tags:
    print(f"  - {tag.name}")

事務(wù)管理

# 自動(dòng)提交事務(wù)
try:
    user = User(name="測(cè)試用戶", email="test@example.com")
    session.add(user)
    session.commit()
except Exception as e:
    session.rollback()
    print(f"發(fā)生錯(cuò)誤: {e}")

# 使用事務(wù)上下文管理器
from sqlalchemy.orm import Session

def create_user(session: Session, name: str, email: str):
    try:
        user = User(name=name, email=email)
        session.add(user)
        session.commit()
        return user
    except:
        session.rollback()
        raise

# 嵌套事務(wù)
with session.begin_nested():
    user = User(name="事務(wù)用戶", email="transaction@example.com")
    session.add(user)

# 保存點(diǎn)
savepoint = session.begin_nested()
try:
    user = User(name="保存點(diǎn)用戶", email="savepoint@example.com")
    session.add(user)
    savepoint.commit()
except:
    savepoint.rollback()

最佳實(shí)踐

  • 會(huì)話管理:為每個(gè)請(qǐng)求創(chuàng)建新會(huì)話,請(qǐng)求結(jié)束后關(guān)閉
  • 異常處理:始終處理異常并適當(dāng)回滾事務(wù)
  • 延遲加載:注意N+1查詢問題,使用 eager loading 優(yōu)化
  • 連接池:合理配置連接池大小和超時(shí)設(shè)置
  • 數(shù)據(jù)驗(yàn)證:在模型層或應(yīng)用層驗(yàn)證數(shù)據(jù)完整性
# 使用上下文管理器管理會(huì)話
from contextlib import contextmanager

@contextmanager
def get_db():
    db = SessionLocal()
    try:
        yield db
        db.commit()
    except Exception:
        db.rollback()
        raise
    finally:
        db.close()

# 使用示例
with get_db() as db:
    user = User(name="上下文用戶", email="context@example.com")
    db.add(user)

總結(jié)

SQLAlchemy ORM提供了強(qiáng)大而靈活的數(shù)據(jù)庫(kù)操作方式,通過本文的介紹,您應(yīng)該能夠:

  • 安裝和配置SQLAlchemy
  • 定義數(shù)據(jù)模型和關(guān)系
  • 執(zhí)行基本的CRUD操作
  • 構(gòu)建復(fù)雜查詢
  • 管理數(shù)據(jù)庫(kù)事務(wù)
  • 遵循最佳實(shí)踐

SQLAlchemy還有更多高級(jí)特性,如混合屬性、事件監(jiān)聽、自定義查詢等,值得進(jìn)一步探索學(xué)習(xí)。

到此這篇關(guān)于使用Pandas處理時(shí)間序列數(shù)據(jù)Time Series詳解的文章就介紹到這了,更多相關(guān)Pandas處理時(shí)間序列數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python-openCV讀RGB通道圖實(shí)例

    Python-openCV讀RGB通道圖實(shí)例

    今天小編就為大家分享一篇Python-openCV讀RGB通道圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 使用實(shí)現(xiàn)pandas讀取csv文件指定的前幾行

    使用實(shí)現(xiàn)pandas讀取csv文件指定的前幾行

    下面小編就為大家分享一篇使用實(shí)現(xiàn)pandas讀取csv文件指定的前幾行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • pytorch + visdom 處理簡(jiǎn)單分類問題的示例

    pytorch + visdom 處理簡(jiǎn)單分類問題的示例

    這篇文章主要介紹了pytorch + visdom 處理簡(jiǎn)單分類問題的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • python正則表達(dá)式查找和替換內(nèi)容的實(shí)例詳解

    python正則表達(dá)式查找和替換內(nèi)容的實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python正則表達(dá)式查找和替換內(nèi)容的實(shí)例詳解內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-10-10
  • python入門之算法學(xué)習(xí)

    python入門之算法學(xué)習(xí)

    這篇文章主要介紹了python入門之算法學(xué)習(xí),文中介紹的非常詳細(xì),對(duì)想要入門python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python sqlparse 解析庫(kù)的基礎(chǔ)使用過程解析

    Python sqlparse 解析庫(kù)的基礎(chǔ)使用過程解析

    sqlparse 是一個(gè) Python 庫(kù),是一個(gè)用于 Python 的非驗(yàn)證 SQL 解析器, 用于解析 SQL 語句并提供一個(gè)簡(jiǎn)單的 API 來訪問解析后的 SQL 結(jié)構(gòu),這篇文章主要介紹了Python sqlparse 解析庫(kù)的基礎(chǔ)使用,需要的朋友可以參考下
    2024-08-08
  • 使用Python快速搭建文件傳輸服務(wù)的方法

    使用Python快速搭建文件傳輸服務(wù)的方法

    這篇文章主要介紹了使用Python快速搭建一個(gè)文件傳輸服務(wù),這樣任何一個(gè)人都能打開瀏覽器把他電腦上的文件傳給我了,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • python中reversed與reverse的區(qū)別解析

    python中reversed與reverse的區(qū)別解析

    reverse()是python中列表的一個(gè)內(nèi)置方法(在字典、字符串和元組中沒有這個(gè)內(nèi)置方法),用于列表中數(shù)據(jù)的反轉(zhuǎn),這篇文章主要介紹了python中reversed與reverse的區(qū)別,需要的朋友可以參考下
    2023-03-03
  • Python利用zhdate模塊實(shí)現(xiàn)農(nóng)歷日期處理

    Python利用zhdate模塊實(shí)現(xiàn)農(nóng)歷日期處理

    zhdate模塊統(tǒng)計(jì)從1900年到2100年的農(nóng)歷月份數(shù)據(jù)代碼,支持農(nóng)歷和公歷之間的轉(zhuǎn)化,并且支持日期差額運(yùn)算。本文將利用這一模塊實(shí)現(xiàn)農(nóng)歷日期的處理,需要的可以參考一下
    2022-03-03
  • Python中創(chuàng)建字典的幾種方法總結(jié)(推薦)

    Python中創(chuàng)建字典的幾種方法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄狿ython中創(chuàng)建字典的幾種方法總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論

铜梁县| 十堰市| 句容市| 永川市| 天津市| 抚顺市| 鄂托克前旗| 平武县| 米泉市| 英吉沙县| 夹江县| 隆回县| 诸城市| 垣曲县| 印江| 巫溪县| 偃师市| 大关县| 赤水市| 通道| 延庆县| 阿克苏市| 肇州县| 屯昌县| 碌曲县| 仙游县| 乌鲁木齐县| 肃北| 巴里| 碌曲县| 营口市| 温泉县| 锡林郭勒盟| 定西市| 沂源县| 内乡县| 龙海市| 柞水县| 宁南县| 怀化市| 江达县|