2010-02-26 33 views
0

我试图一些行插入具有整数的字段的表,其可以是NULL:PyGreSQL为空值整数字段

cur.execute("INSERT INTO mytable (id, priority) VALUES (%(id)d, %(priority)d)", \ 
      {'id': id, 'priority': priority}) 

优先级变量是整数或None。这工作时,优先考虑有一个整数值,但是,当它是None我得到以下错误:

internal error in 'BEGIN': int argument required 

我注意到字符串一般为Python格式化你不能使用None作为一个整数的值是格式化 - 它会抛出pgdb抛出的错误。然而,当我改变格式字符串%(priority)s错误更改:

internal error in 'BEGIN': unsupported format character 'W' (0x57) at index 60 

我想这是因为我再试图导入一个字符串转换为一个整数字段。

如何导入NULL值?

+0

您使用的是pygresql的一个版本?发行说明声称在3.0版本中对此做了一些修改。 – 2010-02-26 15:09:47

+0

另外,你确定优先级是'int'而不是'str'中的数字吗? – 2010-02-26 15:13:49

+0

'pgdb.version'报告'4.0'和'priority'绝对是一个整数 - 它是使用'int(some_str)'创建的' – James 2010-02-26 15:14:29

回答

1

通常,Postgresql将字符串值自动转换为整数列的整数。因此,对于整数列使用字符串格式化程序(如%(priority)s)通常是安全的,前提是string参数包含整数或者是None。如果字符串设置为None,那么该列将被分配NULL。