2015-01-11 25 views
5

是否可以查詢列的最大值可以存儲在其中的數據的可能大小(以字節爲單位)?例如,假設我聲明使用了一列SQLAlchemy:列類型大小的檢查會導致奇數結果

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。我究竟做錯了什麼?

回答

4

據我所知,一列的最大長度爲特定方言並且這些信息並不存儲在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

+0

工作就像一個魅力!使用上面的'q'直接查詢數據庫,可以獲得正確的數據類型大小(在這裏定義)(http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html)。對於Alchemy實現,我現在通過設置映射到SQL MEDIUMBLOB的'self.length'來使用人爲限制。 – Jens

相關問題