2015-01-11 3 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

Работал как очарование! Запрос DB напрямую с помощью 'q' выше дает мне правильные размеры типа данных, как определено [здесь] (http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html). Для реализации Alchemy я теперь использовал искусственный лимит, установив 'self.length', который отображается в SQL MEDIUMBLOB. – Jens

Смежные вопросы