1. 程式人生 > 遊戲 >戰術回合制角色扮演遊戲《Lost Eidolons》將推出試玩

戰術回合制角色扮演遊戲《Lost Eidolons》將推出試玩

# 改

先把要更改的資料查詢出來,
將要修改的值賦給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_base
from 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()