SQLAlchemy:检查列类型大小会产生奇怪的结果

时间:2015-01-11 04:13:02

标签: python database python-3.x sqlalchemy

是否可以在列中查询可以存储在其中的最大可能的数据大小(以字节为单位)?例如,假设我使用

声明了一个列
content = Column(LargeBinary)

然后我如何查询有关content的信息?遵循inspection问题中建议的this方法:

table = File.__table__
field = table.c["content"]
print("max=" + field.type.length)

我得到max=None,而我原本预计这会max=65535考虑field.type=BLOB。我做错了什么?

1 个答案:

答案 0 :(得分:4)

据我了解,列的最大长度为 dialect specific ,此信息不会存储在sqlalchemy源中。但是,根据后端,您可以动态获取它。例如,对于mysql,您可以从INFORMATION_SCHEMA.COLUMNS table检索它:

q = select(["CHARACTER_MAXIMUM_LENGTH"]).select_from("INFORMATION_SCHEMA.COLUMNS").where(
    and_("table_name = '%s'" % File.__tablename__,
         "table_schema = '%s'" % schema,
         "column_name = '%s'" % column_name))
result = session.execute(q)
print(result.first()[0])  # tested - prints 65535

我敢打赌,有一种更美妙的方式来编写查询。

另见:


field.type.length是指用户定义的最大长度initialized to None if not provided explicitly

def __init__(self, length=None):
    self.length = length

由于您未提供length参数,因此您将获得None