戰術回合制角色扮演遊戲《Lost Eidolons》將推出試玩
阿新 • • 發佈:2021-06-16
# 改
先把要更改的資料查詢出來,
將要修改的值賦給title,
提交事務
result = Article.query.filter(Article.title == 'aaa').first()
#將要修改的值賦給title
resul.title = 'ccc'
db.session.commit()
========================================
1. 建立連線
engine = create_engine(r'sqlite:///C:\test.db')
2. 宣告對映
from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Integer, Column, String from sqlalchemy.orm import relationship Base = declarative_base() class User(Base): # 定義表明 __tablename__ = 'users' id = Column(Integer, autoincrement=True, primary_key=True, nullable=False) name = Column(String, doc="姓名", comment="姓名") fullname = Column(String, doc="全名", comment="全名") nickname = Column(String, doc="暱稱", comment="暱稱") addresses = relationship("Address", back_populates="user")
# 會話 Session = sessionmaker(bind=engine)
# 宣告例項session = Session()
# 建立所有不存在的表
Base.metadata.create_all(engine) # 建立單個表User.__table__.create(engine, checkfirst=True) # 建立多個表(在list中新增表明) table_objects = [User.__table__] # 通過Model.__table__的方式新增 table_objects = [Base.metadata.tables["users"]] # 直接通過定義的表明新增 Base.metadata.create_all(engine, tables=table_objects)
# 建立例項 session = Session() # 新增單個使用者 new_user = User(name='jack', fullname='Jack Bean', nickname='gjffdd') session.add(new_user) # 只add時,資料未提交到資料庫 session.commit() # 只有commit後才提交到資料庫,在資料看到 # 新增多個使用者 session.add_all([ User(name='wendy', fullname='Wendy Williams', nickname='windy'), User(name='mary', fullname='Mary Contrary', nickname='mary'), User(name='fred', fullname='Fred Flintstone', nickname='freddy')]) session.flush() # 必須手動flush session.commit() # 批量插入ORM版 session.bulk_save_objects([User(name='wendy', fullname='Wendy Williams', nickname='windy') for i in xrange(1000)]) # 批量插入非ORM版 result = session.execute( User.__table__.insert(), [{'name': 'wang', 'age': 10}, {}] ) # 只add未提交前可進行回滾 session.rollback() user = session.query(User).filter_by(name='jack').first() user.name = "test update" session.commit() print(user.name) # test update
# 建立表
class Even(Base): __tablename__ = "even" # 表名 id = Column(Integer, autoincrement=True, primary_key=True) name = Column(String(10), unique=True) urls = relationship("Url", backref="ev") state = Column(String(5), default="Todo") last_modified_time = Column(DateTime, server_default=func.now(), onupdate=func.now()) def __init__(self, name, state): self.state = state self.name = name
# 增
article1 = Article(title='aaa',content='bbb') db.session.add(article1) db.session.commit()
# 刪
把需要刪除的資料查找出來
然後用類似增加資料的方法db.session.delete(result)
提交事務
result = session.query(User).filter_by(name='jack').delete()
# 刪成功返回1,否則0
session.commit()
=====
result = Article.query.filter(Article.title == 'aaa').first()
db.session.delete(result)
db.session.commit()
# 查
result = session.query(User).filter(User.name.like('%ed')).order_by(User.id) all() 返回所有查詢的結果(一個列表) result.all() first() 返回第一個結果result.first() [] 直接根據索引取 result[:]
==》查詢規則
# get(8) 查詢id為8的使用者資訊 session.query(User).get(8) # distinct() 與 SQL 的 distinct 語句行為一致 query(User).filter(User.name == "test").distinct(User.id).all() # limit() 限制返回的記錄條數 query(User).filter(User.id == 3).limit(3).all() # count() session.query(User).filter(User.name.like('%ed')).count() # order_by #.order_by(欄位) # 正序 #.order_by(-欄位) # 倒序 #.order_by(desc('欄位')) # 倒序 #.order_by('欄位') # 正序 from sqlalchemy import desc, asc query(User).order_by(-User.id) query(User).order_by(desc(User.id)) query(User).order_by(asc(User.id)) query(User).order_by(User.id.desc()) query(User).order_by(User.id.asc()) # 等 query.filter(User.name == 'ed') # 不等 query.filter(User.name != 'ed') # like query.filter(User.name.like('%ed%')) # ilike不區分大小寫 query.filter(User.name.ilike('%ed%')) # in query.filter(User.name.in_(['ed', 'wendy', 'jack'])) query.filter(User.name.in_( session.query(User.name).filter(User.name.like('%ed%')) )) # not in query.filter(~User.name.in_(['ed', 'wendy', 'jack'])) # is null query.filter(User.name == None) query.filter(User.name.is_(None)) # is not null query.filter(User.name != None) query.filter(User.name.isnot(None)) # and # use and_() from sqlalchemy import and_ query.filter(and_(User.name == 'ed', User.fullname == 'Ed Jones')) # or send multiple expressions to .filter() query.filter(User.name == 'ed', User.fullname == 'Ed Jones') # or chain multiple filter()/filter_by() calls query.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones') # or from sqlalchemy import or_ query.filter(or_(User.name == 'ed', User.name == 'wendy')) # match query.filter(User.name.match('wendy'))
** 執行sql語句查詢
engine = create_engine(r'sqlite:///C:\test_new.db')
connection = engine.connect()
cursor = connection.execute("select * from users")
print(cursor.fetchall())
查詢所有使用者資料 User.query.all() # 查詢有多少個使用者 User.query.count() # 查詢第1個使用者 User.query.first() User.query.get(1) # 根據id查詢 # 查詢id為4的使用者[3種方式] User.query.get(4) User.query.filter_by(id=4).all() # 簡單查詢 使用關鍵字實參的形式來設定欄位名 User.query.filter(User.id == 4).all() # 複雜查詢 使用恆等式等其他形式來設定條件 #查詢名字結尾字元為g的所有使用者[開始 / 包含] User.query.filter(User.name.endswith("g")).all() User.query.filter(User.name.startswith("w")).all() User.query.filter(User.name.contains("n")).all() User.query.filter(User.name.like("%n%g")).all() # 模糊查詢 # 查詢名字和郵箱都以li開頭的所有使用者[2種方式] User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all() from sqlalchemy import and_ User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all() # 查詢age是25 或者 `email`以`itheima.com`結尾的所有使用者 from sqlalchemy import or_ User.query.filter(or_(User.age == 25, User.email.endswith("itheima.com"))).all() # 查詢名字不等於wang的所有使用者[2種方式] from sqlalchemy import not_ User.query.filter(not_(User.name == "wang")).all() User.query.filter(User.name != "wang").all() # 查詢id為[1, 3, 5, 7, 9]的使用者 User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all() # 所有使用者先按年齡從小到大, 再按id從大到小排序, 取前5個 User.query.order_by(User.age, User.id.desc()).limit(5).all() # 分頁查詢, 每頁3個, 查詢第2頁的資料 pn = User.query.paginate(2, 3) # pn.items 獲取該頁的資料 pn.page 獲取當前的頁碼 pn.pages 獲取總頁數 ———————————————— 版權宣告:本文為CSDN博主「Lucas__liu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 原文連結:https://blog.csdn.net/lb245557472/article/details/102684812
# 改
先把要更改的資料查詢出來,
將要修改的值賦給title,
提交事務
result = Article.query.filter(Article.title == 'aaa').first() #將要修改的值賦給title resul.title = 'ccc' db.session.commit()