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