
这是因为您为其提供了明确的
Sequence。
SERIALpostgresql中的数据类型生成其 自己的 序列,SQLAlchemy知道如何定位-
因此,如果省略
Sequence,则SQLAlchemy将呈现
SERIAL,假设目的是该列是自动递增的(由
autoincrement参数与Integer
primary_key结合确定;它默认为True)。但是,当
Sequence传递时,SQLAlchemy会看到您不希望隐式创建序列的意图,而是希望
SERIAL您指定的序列:
from sqlalchemy import create_engine, Column, Integer, String, Sequencefrom sqlalchemy.ext.declarative import declarative_basebase = declarative_base()class T1(base): __tablename__ = 't1' # emits CREATE SEQUENCE + INTEGER id = Column(Integer, Sequence('user_id_seq'), primary_key=True)class T2(base): __tablename__ = 't2' # emits SERIAL id = Column(Integer, primary_key=True)class T3(base): __tablename__ = 't3' # emits INTEGER id = Column(Integer, autoincrement=False, primary_key=True)engine = create_engine("postgresql://scott:tiger@localhost/test", echo=True)base.metadata.create_all(engine)输出:
CREATE SEQUENCE user_id_seqCREATE TABLE t1 ( id INTEGER NOT NULL, PRIMARY KEY (id))CREATE TABLE t2 ( id SERIAL NOT NULL, PRIMARY KEY (id))CREATE TABLE t3 ( id INTEGER NOT NULL, PRIMARY KEY (id))
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)