【问题标题】:SQLAlchemy: inspection of column type size gives odd resultSQLAlchemy:检查列类型大小给出奇怪的结果
【发布时间】:2015-03-09 03:37:32
【问题描述】:

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

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

那么如何查询content的信息呢?遵循this 问题中建议的inspection 方法:

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

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

【问题讨论】:

    标签: python database python-3.x sqlalchemy


    【解决方案1】:

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

    【讨论】:

    • 工作就像一个魅力!使用上面的q 直接查询数据库可以得到here 定义的正确数据类型大小。对于 Alchemy 实现,我现在通过设置映射到 SQL MEDIUMBLOB 的 self.length 来使用人为限制。
    猜你喜欢
    • 2017-06-02
    • 2023-04-02
    • 2015-09-16
    • 2016-08-29
    • 2013-08-20
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多