是否可以在列中查询可以存储在其中的最大可能的数据大小(以字节为单位)?例如,假设我使用
声明了一个列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
。我做错了什么?
答案 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
。