首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pygresql -插入并返回序列

pygresql -插入并返回序列
EN

Stack Overflow用户
提问于 2009-09-17 12:05:16
回答 3查看 2.6K关注 0票数 1

我正在使用PyGreSQL访问我的数据库。在我目前正在处理的用例中,我尝试将一条记录插入到一个表中,并返回最后一个rowid……也就是数据库为我的ID字段创建的值:

代码语言:javascript
复制
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字段的值而无需执行任何额外读取或查询的最佳方式是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-17 16:52:06

PyGreSQL中的文档指出,如果使用insert/update语句调用dbconn.query(),它将返回OID。当涉及到多个行时,它继续讲述有关OID列表的内容。

首先,我发现OID特性不起作用。我想知道库和工具的版本号可能会有所帮助,但是,我并不打算返回OID。

最后,通过附加@hacker建议的“返回id",pygresql只是做了正确的事情,并在结果字典中返回了一个带有ID的记录集(参见下面的代码)。

代码语言:javascript
复制
sql = "insert into job_runners (hostname) values ('localhost') returning id"
rv = dbconn.query(sql)
id = rv.dictresult()[0]['id']
票数 1
EN

Stack Overflow用户

发布于 2009-09-17 12:09:20

代码语言:javascript
复制
INSERT INTO job_runners
    (hostname,is_available) VALUES ('localhost',true)
    RETURNING id

也就是说,我对pygresql一无所知,但根据您已经编写的内容,我猜您在这里想要使用的是db.query()

票数 2
EN

Stack Overflow用户

发布于 2010-02-27 08:40:04

假设您有一个游标对象cur

代码语言:javascript
复制
cur.execute("INSERT INTO job_runners (hostname) VALUES (%(hostname)s) RETURNING id",
            {'hostname': 'localhost'})
id = cur.fetchone()[0]

这可以确保PyGreSQL正确地转义输入字符串,从而防止SQL注入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1438430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档