日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlalchemy1.4风格2.0

發(fā)布時(shí)間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlalchemy1.4风格2.0 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 基本配置

官方文檔:
https://docs.sqlalchemy.org/en/14/orm/session_basics.html#session-querying-20

1.1 Model

from sqlalchemy import INTEGER, Column, ForeignKey, String from sqlalchemy.orm import declarative_base, relationshipBase = declarative_base()class Users(Base):__tablename__ = "users"uid = Column(INTEGER, primary_key=True)name = Column(String(30))age = Column(INTEGER)class Article(Base):__tablename__ = "article"a_id = Column(INTEGER, primary_key=True)uid = Column(INTEGER)a_title = Column(String(30))a_readcount = Column(INTEGER)

1.2 映射

from sqlalchemy import create_engine from sqlalchemy.orm import sessionmakerfrom model import Base# 建立與MySQL的連接 db_name = "sanic_test" host = "127.0.0.1" db_user = "root" password = "root"engine = create_engine(f'mysql+pymysql://{db_user}:{password}@{host}/{db_name}', echo=True)# 創(chuàng)建session對(duì)象 session = sessionmaker(engine)()# 創(chuàng)建表,執(zhí)行所有BaseModel類的子類 Base.metadata.create_all(engine)# 提交,必須 session.commit()

1.3 main

from sqlalchemy import create_engine, select from sqlalchemy.orm import Sessionfrom model import Users, Articleengine = create_engine('mysql://root:root@127.0.0.1/sanic_test?charset=utf8') session = Session(engine, future=True)

2 數(shù)據(jù)庫

mysql> select * from users; +-----+--------------+-----+ | uid | name | age | +-----+--------------+-----+ | 1 | 有勇氣的牛排 | 20 | | 2 | 灰太狼 | 20 | +-----+--------------+-----+ mysql> select * from article; +------+-----+---------+-------------+ | a_id | uid | a_title | a_readcount | +------+-----+---------+-------------+ | 1 | 1 | python | 10 | | 2 | 1 | java | 30 | | 3 | 2 | vue | 15 | +------+-----+---------+-------------+

3 異常處理

with Session(engine) as session:session.begin()try:session.add(some_object)session.add(some_other_object)except:session.rollback()raiseelse:session.commit()

結(jié)合寫法

with Session(engine) as session, session.begin():session.add(some_object)session.add(some_other_object)

4 使用 sessionmaker

from sqlalchemy.orm import sessionmaker engine = create_engine('postgresql://scott:tiger@localhost/') # a sessionmaker(), also in the same scope as the engine Session = sessionmaker(engine)

3 增加數(shù)據(jù)

沒有的列,自動(dòng)為空

user1 = Users(name="戰(zhàn)神") user2 = Users(name="戰(zhàn)神2", age=18) session.add(user1) session.add(user2)session.commit()

要一次將項(xiàng)目列表添加到會(huì)話中,可以使用 Session.add_all()

session.add_all([user1, user2])

4 刪除

5 更新

stmt = update(Users).where(Users.uid == 7).values(name="大哥").\execution_options(synchronize_session="fetch")result = session.execute(stmt)

execution_options():可用于建立執(zhí)行時(shí)間選項(xiàng)

5 查詢

5.1 查詢單表 多個(gè)記錄

statement = select(Users).filter_by(age=20) result = session.execute(statement).scalars().all()print(result) for i in result:print(i)print(i.id)print(i.name)print(i.age)

5.2 查詢多表 多個(gè)記錄

statement = select(Users, Article).where(Users.uid == Article.uid) result = session.execute(statement).all()print(result) for users, article in result:print(users.uid, article.a_title)

5.3 指定列

statement = select(Users.uid, Users.name, Article).where(Users.uid == Article.uid) result = session.execute(statement).all()print(result) for uid, name, article in result:print(uid, name, article.a_title)

總結(jié)

以上是生活随笔為你收集整理的sqlalchemy1.4风格2.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。