SQLAlchemy:检查列类型大小给出奇怪的结果

SQLAlchemy: inspection of column type size gives odd result

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

声明一个列
content = Column(LargeBinary)

那我怎么查询content的信息呢?在 inspection approach suggested in this 问题之后:

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

我得到了 max=None,而考虑到 field.type=BLOB,我本以为会是 max=65535。我做错了什么?

据我了解,列的最大长度是 方言特定的,并且此信息未存储在 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

我打赌有更漂亮的方式来编写查询。

另请参阅:

  • Determine max length allowed in a column in mysql
  • How to check if PostgreSQL schema exists using SQLAlchemy?(information_schema查询示例)

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

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

并且由于您没有提供 length 参数,您将得到 None.