dataset库向SQLite插入DBF文本ID记录类型不匹配怎么解决
原因
直接通过db['table1']引用不存在的表时,dataset会自动创建该表,默认新增一个名为id的int类型自增主键列,和你待插入的text类型ID字段类型不匹配,因此触发报错。
解决方案
方案1:显式指定主键为文本类型(适用于ID需要作为主键的场景)
连接数据库后先手动创建表,指定主键的名称和类型,和DBF里的字段匹配即可:
db = dataset.connect('sqlite:///:memory:') # 手动创建表,指定主键名为ID,类型为TEXT table = db.create_table('table1', primary_id='ID', primary_type='TEXT') for record in DBF(settings['xbasefile']): table.insert(record)
方案2:禁用自动生成主键(适用于不需要将ID设为主键的场景)
如果你不需要ID作为主键,也可以在创建表时关闭自动生成默认主键的逻辑,dataset会完全根据你插入的记录字段推断类型:
db = dataset.connect('sqlite:///:memory:') # 关闭自动生成主键列 table = db.create_table('table1', primary_id=False) for record in DBF(settings['xbasefile']): table.insert(record)
内容的提问来源于stack exchange,提问作者user13520940
相关产品推荐
相关产品推荐

