2010-12-31 3 views
6

Hey! Tout a commencé à travailler avec Pylônes en collaboration avec SQLAlchemy, et mon modèle ressemble à ceci:Pylônes, SQlite et champs auto-incrustés

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 

Pour éviter id réutilisation sqlite de qui aurait pu être supprimé, je veux ajouter AUTOINCREMENT à la colonne « id ». J'ai regardé la documentation de sqlalchemy et j'ai vu que le sqlite_autoincrement peut être émis. Un exemple où cet attribut est donné peut être trouvé here.

sqlite_autoincrement semble bien être émis lors de la création de la table elle-même, et je me demandais comment il peut être fourni en utilisant un style déclaratif du modèle comme le mien.

Répondre

17

Essayez d'inclure un attribut __table_args__ avec les arguments que vous passeriez à Table constructeurs dans la définition des données traditionnelles (non déclarative) de style, par exemple:

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

Si vous devez inclure plusieurs arguments, utiliser ce formulaire à la place (dict doit être le dernier):

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

Dans la section Table configuration de la documentation déclarative SQLAlchemy:

Les arguments de table autres que le nom, les métadonnées et les arguments mappés Column sont spécifiés à l'aide de l'attribut de classe __table_args__. Cet attribut accepte à la fois les arguments positionnels et les arguments de mots-clés qui sont normalement envoyés au constructeur Table.