2009-11-22 36 views
12

xem xét định nghĩa bảng đơn giản này (sử dụng SQLAlchemy-0.5.6)Làm thế nào để có được SQLAlchemy chiều dài của cột kiểu string

from sqlalchemy import * 

db = create_engine('sqlite:///tutorial.db') 

db.echo = False # Try changing this to True and see what happens 

metadata = MetaData(db) 

user = Table('user', metadata, 
    Column('user_id', Integer, primary_key=True), 
    Column('name', String(40)), 
    Column('age', Integer), 
    Column('password', String), 
) 

from sqlalchemy.ext.declarative import declarative_base 

class User(declarative_base()): 

    __tablename__ = 'user' 
    user_id = Column('user_id', Integer, primary_key=True) 
    name = Column('name', String(40)) 

Tôi muốn biết chiều dài tối đa của tên cột ví dụ là những gì từ bảng người dùng và từ tài khoản (declarative lớp)

print user.name.length 
print User.name.length 

Tôi đã thử (User.name.type.length) nhưng nó ném ngoại lệ

Traceback (most recent call last): 
    File "del.py", line 25, in <module> 
    print User.name.type.length 
    File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/attributes.py", line 135, in __getattr__ 
    key) 
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'type' 

Trả lời

16
User.name.property.columns[0].type.length 

Lưu ý, rằng SQLAlchemy hỗ trợ tính composite, đó là lý do tại sao columns là một danh sách. Nó có một mục duy nhất cho các thuộc tính cột đơn giản.

+0

Tôi muốn đọc thêm về điều này nhưng không thể tìm thấy tham chiếu đến thuộc tính 'property' ở bất cứ đâu trong các tài liệu chính thức. Ai đó có thể tử tế, đủ để gửi một liên kết? – KomodoDave

+1

Đây là loại trả về: http://sqlalchemy.readthedocs.org/en/latest/orm/internals.html?highlight=strategizedproperty#sqlalchemy.orm.properties.ColumnProperty nhưng tôi muốn thứ hai @KomodoDave và tự hỏi nơi tài liệu dành cho thuộc tính và thuộc tính cột. Đồng nghiệp của tôi và tôi đã đặt trước về việc sử dụng chức năng không có giấy tờ. –

3

này nên hoạt động (thử nghiệm trên máy tính của tôi):

print user.columns.name.type.length 
+0

+ cảm ơn nó hoạt động, nhưng usecase của tôi là hơi khác nhau, tôi về cơ bản sử dụng declarative_base để xác định một lớp người dùng, làm thế nào tôi có thể có được chiều dài từ lớp, xin vui lòng xem câu hỏi sửa đổi –

+1

'print User.name.type.length' không làm việc ? –

+0

có nó ném ngoại lệ 'AttributeError: Không đối tượng' InstrumentedAttribute 'hoặc đối tượng' Comparator 'có thuộc tính' type '' update Câu hỏi –

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