sqlalchemy使用心得

导入必要包

import os
from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

DIR_EXT = 'ext'
DB_NAME = 'TEST.DB'

初始化引擎

def init_db_engine():
    db_dir_location = os.path.join(os.getcwd(), DIR_EXT)
    os.makedirs(db_dir_location, exist_ok=True)
    db_f_location = os.path.join(db_dir_location, DB_NAME)
    engine = create_engine('sqlite:///' + db_f_location, convert_unicode=True, connect_args={
        'check_same_thread': False})
    return engine

获取与数据库交互的会话

def fetch_session(engine):
    db_session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
    return db_session()

自定义数据表结构:

class User(Base):
    __tablename__ = 'user_account'
    id = Column(Integer, primary_key=True)
    name = Column(String(30))
    department = Column(String(30))

    def __repr__(self):
        return f"User(id={self.id!r}, name={self.name!r}, department={self.department!r})"

应用:

if __name__ == "__main__":
    # 初始化引擎
    engine = init_db_engine()
    # 建立类与数据表的映射,即User类对应user_account表
    User.metadata.create_all(engine, checkfirst=True)
    
    # 获取会话
    db_session = fetch_session(engine)
    # 打印表名称
    print(User.__tablename__)
    # 写数据
    db_session.add(User(id=1, name='Lee', department='a'))
    db_session.add(User(id=2, name='Wang', department='a'))
    db_session.add(User(id=3, name='Zhang', department='b'))
    # 提交数据
    db_session.commit()
    # 查询User类对用的表的department为a的所有行
    our_user = db_session.query(User).filter_by(department='a').all()
    print(our_user)
    # 查询User类对用的表的所有数据
    print(db_session.query(User).filter().all())
    # 关闭会话
    db_session.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值