sqlalchemy

# 改

先把要更改的数据查询出来,
将要修改的值赋给title,
提交事务

result = Article.query.filter(Article.title == 'aaa').first()
#将要修改的值赋给title
resul.title = 'ccc'
db.session.commit()

 

========================================

1. 创建连接


engine = create_engine(r'sqlite:///..\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()

 

 

posted @ 2021-06-19 14:59  小毛编  阅读(57)  评论(0编辑  收藏  举报