如何为SQLAlchemy核心中缺少的值插入NULL?

2024-10-03 11:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到的错误是: sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) A value is required for bind parameter 'geboorteDatum' [SQL: 'INSERT into klanten (naam, geboorteDatum)VALUES(?, ?)'] [parameters: [{'naam': 'a'}]] (Background on this error at: http://sqlalche.me/e/cd3x)

它来自语句:connection.execute(text(sql), **kwargs),其中sql是:

sql = ("INSERT into klanten "
       "(naam, geboorteDatum)"
       "VALUES(:naam, :geboorteDatum)")

问题是kwargs缺少一个键值对(在本例中是针对键:“geboortedatam”)。你知道吗

有没有一种方法可以在缺少键值对的情况下自动使用NULL。当您使用ORM时,这似乎是可能的。但我不用ORM。你知道吗

尝试:我尝试使用tmp = (collections.defaultdict(lambda : 'NULL', klant_info))将dict转换为collection.defaultdict。这个转换工作,但我得到相同的错误。这是由于SQLAlchemy处理字典的方式造成的。从找到的方法_execute_clauseelementhere中可以看出,SQLAlchemy提取所有键,因此使用集合.defaultdict不起作用。你知道吗

谨致问候


Tags: 方法executesqlsqlalchemy错误kwargs键值exc
2条回答

如果可以修改kwargs,那么可以运行

kwargs.setdefault('geboorteDatum')

在执行语句之前。如果键在kwargs中,它将是一个no操作,如果不是,则在它下面添加None。你知道吗

更新

您可以使用kwargs.get('geboorteDatum', None)

或者

您可以在插入之前检查**kwargs的geboortedatam键,并在如下变量中断言它:

geboorteDatum = if 'geboorteDatum' in kwargs else None

然后在insert语句中使用变量。你知道吗

相关问题 更多 >