我正在使用PyGreSQL访问我的数据库。在我目前正在处理的用例中,我尝试将一条记录插入到一个表中,并返回最后一个rowid……也就是数据库为我的ID字段创建的值:
create table job_runners (
id SERIAL PRIMARY KEY,
hostname varchar(100) not null,
is_available boolean default FALSE
);
sql = "insert into job_runners (hostname) values ('localhost')"当我使用最有意义的db.insert()时,我收到了一个"AttributeError“。当我尝试db.query(sql)时,我得到的只是一个OID。
问:使用PyGreSQL插入记录并返回ID字段的值而无需执行任何额外读取或查询的最佳方式是什么?
发布于 2009-09-17 16:52:06
PyGreSQL中的文档指出,如果使用insert/update语句调用dbconn.query(),它将返回OID。当涉及到多个行时,它继续讲述有关OID列表的内容。
首先,我发现OID特性不起作用。我想知道库和工具的版本号可能会有所帮助,但是,我并不打算返回OID。
最后,通过附加@hacker建议的“返回id",pygresql只是做了正确的事情,并在结果字典中返回了一个带有ID的记录集(参见下面的代码)。
sql = "insert into job_runners (hostname) values ('localhost') returning id"
rv = dbconn.query(sql)
id = rv.dictresult()[0]['id']发布于 2009-09-17 12:09:20
INSERT INTO job_runners
(hostname,is_available) VALUES ('localhost',true)
RETURNING id也就是说,我对pygresql一无所知,但根据您已经编写的内容,我猜您在这里想要使用的是db.query()。
发布于 2010-02-27 08:40:04
假设您有一个游标对象cur
cur.execute("INSERT INTO job_runners (hostname) VALUES (%(hostname)s) RETURNING id",
{'hostname': 'localhost'})
id = cur.fetchone()[0]这可以确保PyGreSQL正确地转义输入字符串,从而防止SQL注入。
https://stackoverflow.com/questions/1438430
复制相似问题