我有一个Pandas数据框,我要将其插入到SQL数据库中。我直接使用Psycopg2与数据库进行通信,而不是使用SQLAlchemy,因此无法使用Pandas内置的to_sql函数。几乎所有的东西都按照预期工作,只有一个问题:numpy np.NaN值被转换为文本NaN并插入到数据库中。它们应该被视为SQL空值。
所以,我试图制作一个自定义适配器来将np.NaN转换为SQL空值,但是我尝试过的所有方法都导致相同的NaN字符串被插入到数据库中。
我目前正在尝试的代码是:
def adapt_nans(null):
a = adapt(None).getquoted()
return AsIs(a)
register_adapter(np.NaN, adapt_nans)
我已经尝试过许多类似的变化,但都没有成功。
NaN
不应该转换为NULL
,因为它们根本不是同一回事,但我可以想象出某些情况下这样做可能是有意义的。我会使用BEFORE INSERT OR UPDATE ... FOR EACH ROW ...
触发器来进行转换。 - Craig Ringer