2010-12-31 4 views
6

Эй! Только начал работать с Пилонами в сочетании с SQLAlchemy, и моя модель выглядит примерно так:Пилоны, SQlite и автоинкрементарные поля

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 повторного использования идентификаторов, которые могут быть удалены, я хочу, чтобы добавить AUTOINCREMENT в колонке «ID». Я просмотрел документацию по sqlalchemy и увидел, что может быть выпущен sqlite_autoincrement. Пример, где указан этот атрибут, можно найти here.

sqlite_autoincrement, кажется, должно быть выпущено при создании самой таблицы, и я просто задавался вопросом, как ее можно предоставить при использовании декларативного стиля модели, такого как моя.

ответ

17

Try включая атрибут __table_args__ с аргументами вы бы перейти к Table конструкторами в традиционном (не декларативной) стиля определения данных, например:

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

Если вам необходимо включить несколько аргументов, используйте эту форму вместо (ДИКТ должен быть последним):

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

из Table configuration части документации декларативного SQLAlchemy:

Аргументы таблицы, отличные от имен, метаданных и сопоставленных аргументов Column, указаны с использованием атрибута класса __table_args__. Этот атрибут содержит как позиционные, так и аргументы ключевых слов, которые обычно отправляются в конструктор Table.

Смежные вопросы