Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy和postgresql的自动增量_Python_Postgresql_Sqlalchemy - Fatal编程技术网

Python sqlalchemy和postgresql的自动增量

Python sqlalchemy和postgresql的自动增量,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我创建了一个带有主键和序列的表,但通过调试广告(稍后查看表设计),序列没有应用,只是创建了 from sqlalchemy import create_engine, MetaData, Table, Column,Integer,String,Boolean,Sequence from sqlalchemy.orm import mapper, sessionmaker from sqlalchemy.ext.declarative import declarative_base import

我创建了一个带有主键和序列的表,但通过调试广告(稍后查看表设计),序列没有应用,只是创建了

from sqlalchemy import create_engine, MetaData, Table, Column,Integer,String,Boolean,Sequence
from sqlalchemy.orm import mapper, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import json
class Bookmarks(object):
    pass

#----------------------------------------------------------------------
engine = create_engine('postgresql://iser:p@host/sconf', echo=True)
Base = declarative_base()

class Tramo(Base):
    __tablename__ = 'tramos'
    __mapper_args__ = {'column_prefix':'tramos'}

    id = Column(Integer, Sequence('seq_tramos_id', start=1, increment=1),primary_key=True)
    nombre = Column(String)
    tramo_data = Column(String)
    estado = Column(Boolean,default=True)

    def __init__(self,nombre,tramo_data):
        self.nombre=nombre
        self.tramo_data=tramo_data

    def __repr__(self):
        return '[id:%d][nombre:%s][tramo:%s]' % self.id, self.nombre,self.tramo_data

Session = sessionmaker(bind=engine)
session = Session()

tabla = Tramo.__table__
metadata = Base.metadata
metadata.create_all(engine)
表就是这样创建的

CREATE TABLE tramos (
    id INTEGER NOT NULL, 
    nombre VARCHAR, 
    tramo_data VARCHAR, 
    estado BOOLEAN, 
    PRIMARY KEY (id)
)
我希望看到序列的默认nexval的声明 但它不在那里

我还使用了
\uuu映射器\u args\uuu
,但看起来它被忽略了


我缺少什么吗?

您指定了一个名为的显式
Sequence()
对象。如果省略该选项,则
SERIAL
将添加到
id
主键规范中:

CREATE TABLE tramos (
    id INTEGER SERIAL NOT NULL, 
    nombre VARCHAR, 
    tramo_data VARCHAR, 
    estado BOOLEAN, 
    PRIMARY KEY (id)
)
只有当列不是主键时,才会生成
默认值


插入时,SQLAlchemy将根据需要发出
选择下一个值(..)
,以创建下一个值。有关详细信息,请参阅。

我意识到这是一个旧线程,但我偶然发现它存在同样的问题,在其他任何地方都找不到解决方案

经过一些实验,我能够用以下代码解决这个问题:

TABLE_ID = Sequence('table_id_seq', start=1000)

class Table(Base):
    __tablename__ = 'table'

    id = Column(Integer, TABLE_ID, primary_key=True, server_default=TABLE_ID.next_value())

通过这种方式,序列被创建并用作列
id
的默认值,其行为与SQLAlchemy隐式创建的行为相同。

我遇到了一个类似的问题,即复合多列主键。
串行
仅隐式应用于单列主键。但是,此行为可以通过参数控制(默认为“自动”
):


谢谢我现在明白了,你知道前缀信息被忽略的原因吗?
id = Column(Integer, primary_key=True, autoincrement=True)