2010-12-31 25 views
6

Hey! Chỉ cần bắt đầu làm việc với các giá treo kết hợp với SQLAlchemy, và mô hình của tôi trông giống như sau:Giá treo tường, các trường chữ viết hoa và tự động sửa chữa

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 

Để tránh sqlite tái sử dụng của id mà có thể đã bị xóa, tôi muốn thêm autoincrement đến cột "id". Tôi đã xem qua tài liệu cho sqlalchemy và thấy rằng sqlite_autoincrement có thể được phát hành. Ví dụ có thể tìm thấy thuộc tính này here.

sqlite_autoincrement dường như được phát hành khi tạo bảng, và tôi chỉ tự hỏi làm thế nào nó có thể được cung cấp khi sử dụng kiểu khai báo của mô hình như của tôi.

Trả lời

17

Cố gắng bao gồm một thuộc tính __table_args__ với các đối số bạn sẽ vượt qua để Table nhà xây dựng trong truyền thống (không khai báo) phong cách định nghĩa dữ liệu, ví dụ:

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

Nếu bạn phải bao gồm một số lập luận, sử dụng hình thức này thay vì (dict phải là cuối cùng):

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

Từ phần Table configuration của tài liệu Declarative SQLAlchemy:

Đối số bảng khác với tên, siêu dữ liệu và ánh xạ Column đối số được chỉ định bằng thuộc tính lớp __table_args__. Thuộc tính này chứa cả các đối số vị trí cũng như từ khóa thường được gửi đến hàm tạo Table.

Các vấn đề liên quan