在将数据插入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
所以,我无法理解为什么没有结果'插入成功时。
任何帮助将不胜感激。谢谢。
答案 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()
)。这不仅更安全,而且更易于阅读和维护。