primary_key : True 设置某个字段为主键。autoincrement : True 设置这个字段为自动增长的。default :设置某个字段的默认值。在发表时间这些字段上面经 常用。nullable :指定某个字段是否为空。默认值是 True ,就是可以为 空。unique :指定某个字段的值是否唯一。默认是 False 。onupdate :在数据更新的时候会调用这个参数指定的值或者函 数。在第一次插入这条数据的时候,不会用onupdate 的值,只 会使用default 的值。常用于是 update_time 字段(每次更新数据的 时候都要更新该字段值)。name :指定 ORM 模型中某个属性映射到表中的字段名。如果不 指定,那么会使用这个属性的名字来作为字段名。如果指定了, 就会使用指定的这个值作为表字段名。
代码实现
db_util.py
# SQLAlchemy常见的数据类型
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base,sessionmaker
# 数据库的变量
HOST = '127.0.0.1'
PORT = 3306
DATA_BASE = 'itbz'
USER = 'root'
PWD = '123456'
DB_URL = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
# 创建引擎
engine = create_engine(DB_URL)
# 创建一个基类
Base = declarative_base()
Session = sessionmaker(engine)
main.py
# SQLAlchemy列参数的使用
from datetime import datetime
from sqlalchemy import Column,Integer,DateTime,String
from db_util import Base,engine,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)
update_time = Column(DateTime,default=datetime.now,onupdate=datetime.now) # 当数据更新后,参数才会被修改
create_time = Column(DateTime,default=datetime.now)
def create_data():
new1 = News(phone='13612341234',title='测试列参数')
with Session() as session:
session.add(new1)
session.commit()
# def create_data2():
# # new1 = News(phone='13612341234',title='测试列参数') # 不允许重复
# new1 = News(phone='13612341235') # title不能为空
# with Session() as session:
# session.add(new1)
# session.commit()
def create_data3():
with Session() as session:
new1 = session.query(News).first()
new1.read_count=2
session.commit()
if __name__ == "__main__":
# Base.metadata.create_all(engine)
# create_data()
create_data3()
执行结果:
创建表
添加数据
手机号不能重复
title不能为空
更新update_time