使用 psycopg2 返回一个值

发布于 2024-08-19 06:15:06 字数 372 浏览 9 评论 0原文

理想情况下,我希望能够执行以下操作:

id_of_new_row = cursor.lastrowid()

其中我获取新创建或修改的行的 id。但这不能通过 psycopg2 获得。或者,我尝试过这个:

id_of_new_row = cursor.execute('INSERT INTO this_table (value1, value2, value3) VALUES (%s, %s, %s) RETURNING id', (some_value1, some_value2, some_value3))

这不起作用,可能是因为在提交之前它不会知道 id...

帮助!

Ideally I'd like to be able to do something like:

id_of_new_row = cursor.lastrowid()

in which I get the id of the newly created or modified row. But this isn't available through psycopg2. Alternatively, I've tried this:

id_of_new_row = cursor.execute('INSERT INTO this_table (value1, value2, value3) VALUES (%s, %s, %s) RETURNING id', (some_value1, some_value2, some_value3))

which doesn't work, probably because it won't know the id until after the commit is made...

Help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别低头,皇冠会掉 2024-08-26 06:15:06

当然可以,命令完成后它就会知道 ID,这就是 RETURNING 的实现方式。不过,您需要实际获取它,因此类似:

cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]

应该在您的场景中工作。

Sure it will, it'll know the ID as soon as the command finishes, that's how RETURNING is implemented. You need to actually fetch it though, so something like:

cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]

should work in your scenario.

彻夜缠绵 2024-08-26 06:15:06

RETURNING 适用于 Postgresql >= 8.2

RETURNING works on Postgresql >= 8.2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文