SqlAlchemy-python-MySQL类型对比
MK
用法
语句
pthon对Mysql操作和使用ORM框架(SQLAlchemy)
类型对比
sqlalchemy | Python | 数据库类型 | Go |
---|
Integer | int 整数(4字节) | INT | |
SmallInteger | int取值范围小的整数(2字节) | SMALLINT | |
BigInteger | int或long | BIGINT | |
Float | float | FLOAT | |
Numeric | decimal.Decimal | DECIMAL | |
String | str | VARCHAR | |
Text | str | TEXT | |
Boolean | bool | BOOLEAN | |
Date | datetime.date | DATE | |
Time | datetime.time | TIME | |
DateTime | datetime.datetime | DATETIME | |
Enum | str | ENUM | |
LargeBinary | str | VARBINARY | |
Unicode | unicode 可变长度Unicode字符串 | \ | |
Interval | datetime.timedelta 时间间隔 | | |
PickleType | 任意Python对象 自动Pickle序列化 | | |
SqlAlchemy列选项 | 描述 |
---|
primary_key | 如果设置为True,则为该列表的主键 |
unique | 如果设置为True,该列不允许相同值 |
index | 如果设置为True,为该列创建索引,查询效率会更高 |
nullable | 如果设置为True,该列允许为空。如果设置为False,该列不允许空值 |
default | 定义该列的默认值 |
SqlAlchemy关系选项 | 描述 |
---|
backref | 在关系的另一个模型中添加反向引用 |
primaryjoin | 明确指定两个模型之间使用的联结条件。只在模棱两可的关系中需要指定 |
lazy | 指定如何加载相关记录。可选值有select(首次访问时按需加载)、immediate(源对象加载后就加载)、joined(加载记录,但使用联结)、subquery(立即加载,但使用子查询)、noload(永不加载)和dynamic(不加载记录,但提供加载记录的查询) |
uselist | 如果设为False,不适用列表,而使用标量值 |
order_by | 指定关系记录的排序方式 |
secondary | 指定多对多关系中关系表的名字 |
secondaryjoin | SQLAlchemy无法自行决定时,指定多对多关系中的二级联结条件 |
外键四种关系 |
---|
uid = Column(Integer , ForeignKey(“user.id” ,ondelete=“RESTRICT”))(默认就是这种。当父表数据被删除,从表会拒绝删除) |
uid = Column(Integer , ForeignKey(“user.id” ,ondelete=“NO ACTION”))(同上 ) |
uid = Column(Integer , ForeignKey(“user.id” ,ondelete=“CASCADE”))(父表数据删除、从表数据也会跟着删除) |
uid = Column(Integer , ForeignKey(“user.id” ,ondelete=“SET NULL”))(父表数据删除,从表外键字段设为NULL) |
使用 代码:
**db = SQLAlchemy()
...
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
about_me = db.Column(db.String(140))
info = db.Column(db.Text)
last_seen = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return '<User {}>'.format(self.username)**