• SQLAlchemy列参数的使用和query函数的使用


    目录

    Column常用参数

    代码演示

     代码刨析

    query函数的使用

    基本用法

    常见用法示例

    查询所有记录

    根据条件查询

    查询第一条符合条件的记录

    查询特定列的值

    添加排序规则

    使用聚合函数

    连接查询 

    使用filter_by


    Column常用参数

    • primary_key:True设置某个字段为主键。

    1. class User(Base):
    2. __tablename__ = 'users'
    3. id = Column(Integer, primary_key=True)
    • autoincrement:True设置这个字段为自动增长的。

    1. from sqlalchemy import Column, Integer, String
    2. class User(Base):
    3. __tablename__ = 'users'
    4. id = Column(Integer, primary_key=True, autoincrement=True)
    5. username = Column(String(50))
    • default:设置某个字段的默认值。在发表时间这些字段上面经常用。

    1. class User(Base):
    2. __tablename__ = 'users'
    3. id = Column(Integer, primary_key=True)
    4. status = Column(String(20), default='active')
    • nullable:指定某个字段是否为空。默认值是True,就是可以为空。

    1. class User(Base):
    2. __tablename__ = 'users'
    3. id = Column(Integer, primary_key=True)
    4. name = Column(String(50), nullable=False)
    • unique:指定某个字段的值是否唯一。默认是False。

    1. class User(Base):
    2. __tablename__ = 'users'
    3. id = Column(Integer, primary_key=True)
    4. email = Column(String(100), unique=True)
    • onupdate:在数据更新的时候会调用这个参数指定的值或者函数。在第一次插入这条数据的时候,不会用onupdate的值,只会使用default的值。常用于是update_time字段(每次更新数据的时候都要更新该字段值)。

    1. from sqlalchemy import Column, Integer, String, DateTime, func
    2. class User(Base):
    3. __tablename__ = 'users'
    4. id = Column(Integer, primary_key=True)
    5. username = Column(String(50))
    6. last_updated = Column(DateTime, onupdate=func.now())
    • server_default(服务器端默认值):在数据库层面设置默认值,而不是在Python代码层面。

    1. from sqlalchemy import text
    2. class User(Base):
    3. __tablename__ = 'users'
    4. id = Column(Integer, primary_key=True)
    5. created_at = Column(DateTime, server_default=text('CURRENT_TIMESTAMP'))
    • index(索引):指定是否为该列创建索引,以提高检索速度。

    1. class User(Base):
    2. __tablename__ = 'users'
    3. id = Column(Integer, primary_key=True)
    4. username = Column(String(50), index=True)
    • name:指定ORM模型中某个属性映射到表中的字段名。如果不指定,那么会使用这个属性的名字来作为字段名。如果指定了,就会使用指定的这个值作为表字段名。这个参数也可以当作位置参数,在第1个参数来指定。

    1. title = Column(String(50),name='title',nullable=False)
    2. title = Column('my_title',String(50),nullable=False)

    代码演示

    1. from datetime import datetime
    2. from sqlalchemy import Column,Integer,DateTime,String
    3. from db_util import Base,Session
    4. class News(Base):
    5. __tablename__ = 't_news2'
    6. id = Column(Integer,primary_key = True,autoincrement = True)
    7. phone = Column(String(11),unique = True)
    8. title = Column(String(32),nullable = False)
    9. read_count = Column(Integer,default=1)
    10. create_time = Column(DateTime,default = datetime.now)
    11. update_time = Column(DateTime,default = datetime.now, onupdate =datetime.now ) # 当数据更新后,参数的内容才会更改
    12. def create_data():
    13. new1 = News(phone='16866666666',title='测试列参数')
    14. with Session() as session:
    15. session.add(new1)
    16. session.commit()
    17. def create_data2():
    18. # new1 = News(phone='16866666666',title='测试列参数') # 不允许重复
    19. # new1 = News(phone='16866666668') # title不能为空
    20. # with Session() as session:
    21. # session.add(new1)
    22. # session.commit()
    23. with Session() as session:
    24. new1 = session.query(News).first()
    25. new1.read_count = 2
    26. session.commit()
    27. if __name__ == '__main__':
    28. # Base.metadata.create_all()
    29. # create_data()
    30. create_data2()

     代码刨析

    1. id: 主键列,自动递增。
    2. phone: 字符串类型,长度为11,唯一约束。
    3. title: 字符串类型,最大长度为32,不能为空。
    4. read_count: 整数类型,有一个默认值为1。
    5. create_time: 日期时间类型,有一个默认值为当前时间。
    6. update_time: 日期时间类型,有一个默认值为当前时间,并且在更新时会自动更新为新的时间。

    这个脚本中还包含了两个函数 create_data()create_data2(),它们用于向数据库中插入数据。

    create_data2() 函数中,首先获取了表中的第一个记录,然后将其read_count修改为2,并提交了事务。

    请注意,在这个代码中,onupdate=datetime.now 表示在记录更新时,update_time 会被自动更新为当前时间。

    query函数的使用

    query 函数是 SQLAlchemy 中用于执行数据库查询操作的方法。它通常用于从数据库中检索数据。

    基本用法

    session.query(ModelClass)
    

    这里的 ModelClass 定义的模型类,它对应了数据库中的表格。query 函数将返回一个查询对象,可以在该对象上继续添加过滤条件、排序规则等,最终执行查询操作以获取符合条件的数据。

    常见用法示例

    查询所有记录

    result = session.query(User).all()
    

    根据条件查询

    result = session.query(User).filter(User.name == 'John').all()
    

    查询第一条符合条件的记录

    result = session.query(User).filter(User.name == 'John').first()
    

    查询特定列的值

    result = session.query(User.name, User.email).all()
    

    添加排序规则

    result = session.query(User).order_by(User.name).all()
    

    使用聚合函数

    1. from sqlalchemy import func
    2. result = session.query(func.count(User.id)).scalar()

    连接查询 

    result = session.query(User, Address).join(Address, User.id == Address.user_id).all()
    

    使用filter_by

    result = session.query(User).filter_by(name='John').all()
    

  • 相关阅读:
    C++string类重要函数模拟实现
    JDK1.8新特性---新时间日期API
    Doris Manager集群的工具,运维更顺畅
    自注意力中的不同的掩码介绍以及他们是如何工作的?
    字符串常量池与StringBuilder
    MNE系列教程1——MNE的安装与基本绘图
    【华为OD机试真题 python】 TLV解析【2022 Q4 | 200分】
    Excel vlookup 如何使用
    漫谈:C语言 值传递 函数参数 指针
    Excel函数
  • 原文地址:https://blog.csdn.net/m0_67093160/article/details/133316949