【问题标题】:How to get sqlalchemy length of a string column如何获取字符串列的sqlalchemy长度
【发布时间】:2012-10-28 09:35:17
【问题描述】:

考虑这个简单的表定义(使用 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'

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:
    User.name.property.columns[0].type.length
    

    注意,SQLAlchemy 支持复合属性,这就是为什么columns 是一个列表。它具有用于简单列属性的单个项目。

    【讨论】:

    • 我想阅读更多关于此的信息,但在官方文档中的任何地方都找不到对 property 属性的引用。有人愿意发布链接吗?
    • 这是它返回的类型:sqlalchemy.readthedocs.org/en/latest/orm/… 但我想第二个@KomodoDave 并想知道属性和列属性的文档在哪里。我和我的同事对使用未记录的功能持保留意见。
    • 看起来上面的链接已经失效了。新 URL 似乎是 docs.sqlalchemy.org/en/14/orm/…
    【解决方案2】:

    这应该可以工作(在我的机器上测试过):

    print user.columns.name.type.length
    

    【讨论】:

    • + 感谢它有效,但我的用例有点不同,我基本上是使用 declarative_base 来定义一个用户类,我如何从类中获取长度,请参阅修改后的问题
    • 是的,它抛出异常'AttributeError:'InstrumentedAttribute'对象和'Comparator'对象都没有属性'type''更新问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多