我正在使用带有后端的SQL ALCHEMY ORM作为sqlite。我有明确的ORM映射和一个映射
class Tasks(Base):
__tablename__ = "tasks"
task_id = Column(Integer, primary_key=True)
task_name = Column(String,nullable=False)
def __init__(self, task_id,task_name):
self.task_id = task_id
self.task_name = task_name
我有一个方法,用几个初始值填充表任务。
def populate_tasks_table():
'''
Add default tasks to task table.
'''
tasks_dict = {1:'modelling',2:'design',3:'personal_time',
4:'breaks',5:'discussion',6:'Client Meeting',7:'Misc'}
tasks_dict = [{'task_id':task_id,'task_name':task_name}
for task_id,task_name in tasks_dict.iteritems()]
connection = engine.connect()
metadata = MetaData()
task_table = Table("tasks", metadata)
##Populate the table with default tasks
connection.execute(task_table.insert(),tasks_dict)
当我执行此操作时,它会抛出sqlalchemy.exc.IntegrityError:(IntegrityError)tasks.task_name可能不为NULL u' INSERT INTO tasks DEFAULT VALUES' ((),(),(),(),(),(),())。
我在创建引擎时尝试打开echo参数,该引擎显示引擎尝试执行的所有查询。它显示以下日志。
2015-02-16 16:13:43,478 INFO sqlalchemy.engine.base.Engine INSERT INTO tasks DEFAULT VALUES
2015-02-16 16:13:43,478 INFO sqlalchemy.engine.base.Engine((),(),(),(),(),(),())
不知道为什么引擎试图在表格中插入空白值,尽管我提供了一个dicts列表。