我很想知道如何将Postgres函数传递给Psycopg2中insert语句中的字段。在文档中随处可见,但找不到答案。
代码:
来自DBconn类:
def insert(self, table, data):
fields = data.keys()
sql = "INSERT INTO " + table + "("
sql += ",".join(fields) + ") VALUES (" + ",".join(["%s"]*len(fields)) + ");"
self.cur.execute(sql, data.values())
调用此功能时:
db.insert("tblpeople", {"person_name":"john", "org_id":"currval('tblorganisations_org_id_seq')"})
所以问题是如何告诉Psycopg2 org_id值是Postgres函数?
TNX!
答案 0 :(得分:0)
您的代码正在生成声明:
INSERT INTO tblpeople (org_id,person_name) VALUES (%s,%s);
你传递了2个参数。那不会奏效。您想要生成此代码:
INSERT INTO tblpeople (org_id,person_name)
VALUES (currval('tblorganisations_org_id_seq'),%s);
然后传递一个参数。对于您当前的数据结构,我没有看到任何方法。如果您将另一段数据添加到字典中,例如:
{
"text":{"person_name":"john"},
"function":{"org_id":"currval('tblorganisations_org_id_seq')"}
}
并更改构造函数以根据&#39;函数生成正确的查询。密钥,或者,你可以硬编码&#39;您的查询构建器可以识别&#39; currval(&#39;位于值的开头。无论如何,基本问题是您将数据作为字符串参数传递,但不能正确处理。< / p>
-g