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

Jen*_*ens 5 python database sqlalchemy python-3.x

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

content = Column(LargeBinary)
Run Code Online (Sandbox Code Playgroud)

那么我该如何查询有关的信息content?继检验方法的建议问题中:

table = File.__table__
field = table.c["content"]
print("max=" + field.type.length)
Run Code Online (Sandbox Code Playgroud)

我得到了一个max=None,而我本max=65535以为这是在考虑field.type=BLOB.我究竟做错了什么?

ale*_*cxe 4

据我了解,列的最大长度是特定于方言的,并且此信息不存储在 sqlalchemy 源中。不过,根据后端的不同,您可以动态获取它。例如,您可以从表中mysql检索它:INFORMATION_SCHEMA.COLUMNS

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
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:


field.type.length指用户定义的最大长度,如果未明确提供,则初始化为None

def __init__(self, length=None):
    self.length = length
Run Code Online (Sandbox Code Playgroud)

由于您没有提供length论据,因此您得到了None