考虑下面这个简单的表定义(使用SQLAlchemy-0.5.6)
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))
我想知道列名称的最大长度是多少,例如,从用户表和从用户(声明类)
print user.name.length
print User.name.length
我尝试过(User.name.type.length),但它抛出异常
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'
4条答案
按热度按时间omhiaaxx1#
注意,SQLAlchemy支持复合属性,这就是为什么
columns
是一个列表。它有一个简单的列属性项。zvokhttg2#
这应该可以工作(在我的机器上测试):
91zkwejq3#
当字段太大时,我会遇到错误,所以我写了一个通用函数来修剪任何字符串,并考虑到带有空格的单词。这将保持单词不变,并修剪字符串以供插入。我包括了我的orm模型以供参考。
v1uwarro4#
如果您有权访问该类:
如果您可以存取执行严修,请使用
__class__
dunder方法来存取Class。因此,在您的情况下:
我的用例类似于@Gregg威廉姆森,但是,我以不同的方式实现了它: