Мне нравится идея манифеста типизации sqlite / сходство типов:
http://www.sqlite.org/datatype3.html
По сути, если я установлю сходство столбца как «числовое», оно будет пригружать целые числа или числа с плавающей запятой, чтобы хранить их как таковые, но все же позволит мне сохранять строки, если захочу. Мне кажется, это лучший тип по умолчанию для столбца, когда я заранее не уверен, какие данные я хочу сохранить в нем.
итак, я иду:
metadata = MetaData()
new_table = Table(table_name, metadata )
for col_name in column_headings:
new_table.append_column(Column(col_name,
sqlite.NUMERIC, #this should duck-type numbers but can handle strings as well
primary_key=col_name in primary_key_columns))
new_table.create(self.engine, checkfirst=False)
но когда я пытаюсь сохранить некоторые строковые значения, например, "abc" в таблице, sqlalchemy падает:
File "[...]\sqlalchemy\processors.py", line 79, in to_float
return float(value)
ValueError: invalid literal for float(): abc
Бу, шипение. Итак, есть ли способ убедить sqlalchemy позволить sqlite печатать? возможно я могу использовать тип из sqlalchemy.types вместо sqlachemy.dialects.sqlite?
[edit:] для бонусных баллов: мне нужно иметь возможность доступа к таблицам через самоанализ / размышление. так что какой-то способ работы с meta.reflect () был бы великолепен! ; -)