Column常用参数
- primary_key:True设置某个字段为主键。
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True)
- autoincrement:True设置这个字段为自动增长的。
from sqlalchemy import Column, Integer, String class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, autoincrement=True) username = Column(String(50))
- default:设置某个字段的默认值。在发表时间这些字段上面经常用。
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) status = Column(String(20), default='active')
- nullable:指定某个字段是否为空。默认值是True,就是可以为空。
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False)
- unique:指定某个字段的值是否唯一。默认是False。
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) email = Column(String(100), unique=True)
onupdate:在数据更新的时候会调用这个参数指定的值或者函数。在第一次插入这条数据的时候,不会用onupdate的值,只会使用default的值。常用于是update_time
字段(每次更新数据的时候都要更新该字段值)。
from sqlalchemy import Column, Integer, String, DateTime, func class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(50)) last_updated = Column(DateTime, onupdate=func.now())
- server_default(服务器端默认值):在数据库层面设置默认值,而不是在Python代码层面。
from sqlalchemy import text class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) created_at = Column(DateTime, server_default=text('CURRENT_TIMESTAMP'))
- index(索引):指定是否为该列创建索引,以提高检索速度。
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(50), index=True)
- name:指定ORM模型中某个属性映射到表中的字段名。如果不指定,那么会使用这个属性的名字来作为字段名。如果指定了,就会使用指定的这个值作为表字段名。这个参数也可以当作位置参数,在第1个参数来指定。
title = Column(String(50),name='title',nullable=False) title = Column('my_title',String(50),nullable=False)
代码演示
from datetime import datetime from sqlalchemy import Column,Integer,DateTime,String from db_util import Base,Session class News(Base): __tablename__ = 't_news2' id = Column(Integer,primary_key = True,autoincrement = True) phone = Column(String(11),unique = True) title = Column(String(32),nullable = False) read_count = Column(Integer,default=1) create_time = Column(DateTime,default = datetime.now) update_time = Column(DateTime,default = datetime.now, onupdate =datetime.now ) # 当数据更新后,参数的内容才会更改 def create_data(): new1 = News(phone='16866666666',title='测试列参数') with Session() as session: session.add(new1) session.commit() def create_data2(): # new1 = News(phone='16866666666',title='测试列参数') # 不允许重复 # new1 = News(phone='16866666668') # title不能为空 # with Session() as session: # session.add(new1) # session.commit() with Session() as session: new1 = session.query(News).first() new1.read_count = 2 session.commit() if __name__ == '__main__': # Base.metadata.create_all() # create_data() create_data2()
代码刨析
id
: 主键列,自动递增。phone
: 字符串类型,长度为11,唯一约束。title
: 字符串类型,最大长度为32,不能为空。read_count
: 整数类型,有一个默认值为1。create_time
: 日期时间类型,有一个默认值为当前时间。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()
使用聚合函数
from sqlalchemy import func 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()