我喜欢 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?
[编辑:] 加分:我需要能够通过内省/反射访问表格。因此,使用 meta.reflect() 进行这项工作的某种方式会很棒!;-)