我正在使用Python和psycopg2连接到Postgres。
当我插入一行时…
sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)
…如何获取刚刚插入的行的ID?试:
hundred = cursor.fetchall()
使用时返回错误RETURNING id
:
sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ") RETURNING id;"
hundred = cursor.execute(sql_string)
简单地返回None
。
更新:也是currval
(即使直接在postgres中使用此命令也可以):
sql_string = "SELECT currval(pg_get_serial_sequence('hundred', 'id'));"
hundred_id = cursor.execute(sql_string)
有人可以建议吗?
谢谢!
cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]
并且,请不要手动构建包含值的SQL字符串。您可以(并且应该!)单独传递值,从而不必进行转义和SQL注入:
sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES (%s,%s,%s) RETURNING id;"
cursor.execute(sql_string, (hundred_name, hundred_slug, status))
hundred = cursor.fetchone()[0]
有关更多详细信息,请参见psycopg文档:http ://initd.org/psycopg/docs/usage.html#passing-
parameters-to-sql-queries
问题内容: 如何检索刚插入的行? 例如: 我插入了2,返回了2 然后插入3,我想返回3而不是5行。 提前致谢。 史蒂夫 PS:可能需要使用存储过程吗? 问题答案: 我不是100%不确定您到底想要什么…。但是SQL Server有一个子句可以从and和statement中输出内容: 在这里,您正在插入值和的插入值(例如INT IDENTITY列)和。 如果仅将结果返回到Mgmt Studio中的网格
问题内容: 有谁知道如何修理它。我正在使用Mac OS 10.8.2 问题答案: 在Python 3中是一个函数;它应该是: 正确安装或使用新版本(如果存在错误)。 在Python 3.3上工作正常。
问题内容: 我想将psycopg2用于多行,然后使用单个查询(按顺序)返回所有s。这就是PostgreSQL扩展的目的,并且似乎可以使用正常工作: 现在,为了传递动态生成的数据,似乎是一种方法: 但是,在这种情况下,将产生以下内容: 我如何才能正确返回所有s而不是仅返回一个? 问题答案: 您不应该从以下位置获得结果: 该功能对于更新数据库的命令最有用:查询返回的任何结果集都将被丢弃。 根据psyc
问题内容: 如何撤消最近执行的mysql查询? 问题答案: 如果将表类型定义为InnoDB,则可以使用事务。您将需要set ,并且可以在发出之后或在查询或会话结束时提交或取消交易。
问题内容: 我已经开始执行以下代码 现在,我需要知道我刚刚开始的进程的pid。 问题答案: 由于Java 9类具有新方法long pid(),因此它很简单
问题内容: 如果所有数据被意外删除,是否可以将表恢复为上一次数据。 问题答案: 还有另一种解决方案,如果服务器上有活动的二进制日志,则可以使用 用它生成一个sql文件 然后搜索您缺少的行。如果您没有激活它,则没有其他解决方案。下次进行备份。