2010-02-26 148 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。