2010-05-06 38 views
5

Tôi đang tìm kiếm một cách để nhìn vào SQLAlchemy ORM lớp/thực thể để xác định các loại và các ràng buộc khác (như độ dài tối đa) của thuộc tính của một thực thể.SQLAlchemy introspection của ORM lớp/đối tượng

Ví dụ, nếu tôi có một lớp khai báo:

class User(Base): 
    __tablename__ = "USER_TABLE" 

    id = sa.Column(sa.types.Integer, primary_key=True) 
    fullname = sa.Column(sa.types.String(100)) 
    username = sa.Column(sa.types.String(20), nullable=False) 
    password = sa.Column(sa.types.String(20), nullable=False) 
    created_timestamp = sa.Column(sa.types.DateTime, nullable=False) 

tôi muốn để có thể tìm ra rằng 'fullname' lĩnh vực phải là một chuỗi với chiều dài tối đa là 100, và là nullable . Và trường 'created_timestamp' là một DateTime và không thể rỗng.

Trả lời

11

Cái gì như:

table = User.__table__ 
field = table.c["fullname"] 
print "Type", field.type 
print "Length", field.type.length 
print "Nullable", field.nullable 

EDIT:

Phiên bản sắp tới 0.8 có New Class Inspection System:

Inspection System New Class

Tình trạng: hoàn thành, cần tài liệu

Rất nhiều người dùng SQLAlchemy đang viết hệ thống đòi hỏi khả năng để kiểm tra các thuộc tính của một lớp ánh xạ, bao gồm khả năng có được tại các cột khóa chính, các mối quan hệ đối tượng, đồng bằng thuộc tính, và vân vân, điển hình cho mục đích của việc xây dựng các hệ thống dữ liệu marshalling , như JSON/XML và các thư viện hình thức khóa học là .

Ban đầu, mô hình Bảng và Cột là kiểm tra ban đầu điểm, có hệ thống được ghi chép đầy đủ. Trong khi các mô hình SQLAlchemy ORM cũng hoàn toàn không thể quan sát được, điều này chưa bao giờ là một tính năng ổn định và được hỗ trợ đầy đủ và người dùng có xu hướng không có ý tưởng rõ ràng về cách nhận thông tin này.

0.8 có kế hoạch tạo API nhất quán, ổn định và được ghi đầy đủ tài liệu cho mục đích này, cung cấp hệ thống kiểm tra hoạt động trên các lớp, trường hợp và các thứ khác. Trong khi nhiều yếu tố của hệ thống này đã có sẵn, kế hoạch là để khóa API bao gồm accessors khác nhau có sẵn từ đó đối tượng như Mapper, InstanceState, và MapperProperty:

(theo liên kết để biết thêm)

+0

Tôi đã dành rất nhiều thời gian với 'khai báo' mà tôi quên tất cả về việc xem xét các cột bên dưới. Cảm ơn! –

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