Pylons、SQLite和自增字段

8

你好! 我刚开始使用Pylons和SQLAlchemy,我的模型大致如下:

from sqlalchemy import Column
from sqlalchemy.types import Integer, String

from helloworld.model.meta import Base

class Person(Base):
    __tablename__ = "person"

    id = Column(Integer, primary_key=True)
    name = Column(String(100))
    email = Column(String(100))

    def __init__(self, name='', email=''):
        self.name = name
        self.email = email

    def __repr__(self):
        return "<Person('%s')" % self.name

为了避免sqlite重复使用已删除的id,我想在“id”列中添加AUTOINCREMENT。我查看了sqlalchemy的文档,并发现可以使用sqlite_autoincrement。您可以在这里找到一个使用该属性的示例。
然而,似乎只有在创建表本身时才会使用sqlite_autoincrement,我想知道如何在使用类似于我的声明式模型的方式时提供它。
1个回答

24

尝试在传统(非声明式)数据定义样式中包含__table_args__属性和你将传递给Table构造函数的参数,例如:

class Person(Base):
    __tablename__ = "person"
    __table_args__ = {'sqlite_autoincrement': True}

如果你需要包含多个参数,请使用下面这种形式(字典必须是最后一个参数):

__table_args__ = (
    Unique('foo'),
    # ...
    {'sqlite_autoincrement': True}
)

从Declarative SQLAlchemy文档的Table configuration部分得知:

除了名称、元数据和映射的Column参数外,表参数可使用__table_args__类属性指定。该属性既可以容纳位置参数,也可以容纳通常发送到Table构造函数的关键字参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接