Heroku数据库:插入操作

时间:2017-12-23 11:02:07

标签: python postgresql heroku

在将数据插入heroku的Postgres数据库时,我很困惑。

这就是事情,

我已创建与数据库的连接,然后

cursor = conn.cursor()
cursor.execute("INSERT INTO users(username, useremail, userpass) VALUES ('"+_name+"','"+_email+"','"+_password+"')")

执行后,我通过

检查了sql状态

print(cursor.statusmessage)

它返回,

  

INSERT 0 1

但在执行时,data =

  

cursor.fetchall()

它引发了我的错误

  

File" /Users/abc/PycharmProjects/testSkillNetwork/app.py",   第75行,在signUp中       data = cursor.fetchall()。

ProgrammingError: no results to fetch

所以,我无法理解为什么没有结果'插入成功时。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定你使用什么驱动程序连接到数据库,假设你正在使用psycopg2,这是最着名的,你正在观察的是正常行为。从here阅读:

A ProgrammingError is raised if the previous call to execute*() did not produce any result set or no call was issued yet.

insert语句不会产生任何结果,其他错误则会产生错误。如果要获取刚刚插入的行,请再次查询数据库:

cur.execute("SELECT * FROM users;")
cur.fetchall()

这将为您提供行。

除此之外,如果您阅读basic usage和参数化查询部分,从不在执行查询时使用python字符串连接,因为它使其易受{{3}攻击}。

答案 1 :(得分:1)

您需要发出SELECT查询才能从数据库中检索数据。

cursor.execute("SELECT * FROM users")
cursor.fetchall()

这可以给你一些结果。

此外,您应该在完成数据插入后提交事务,否则它将丢失。使用:

conn.commit()

另一个更大的问题是构建查询的方式容易受到SQL注入的影响。您应该使用参数化查询,而不是使用字符串连接:

cursor.execute("INSERT INTO users(username, useremail, userpass) VALUES (%s, %s, %s)", (_name,_email,_password))

使用此样式,数据库适配器将使用传递给%s的参数元组中的值替换占位符(cursor.execute())。这不仅更安全,而且更易于阅读和维护。