Heroku数据库:插入操作

2024-04-24 23:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在heroku的Postgres数据库中插入数据时感到困惑。在

事情是这样的

我已经创建了到数据库的连接

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

执行之后,我通过

print(cursor.statusmessage)

它回来了

INSERT 0 1

但在执行时,数据=

cursor.fetchall()

它给我带来了错误

File "/Users/abc/PycharmProjects/testSkillNetwork/app.py", line 75, in signUp data = cursor.fetchall().

ProgrammingError: no results to fetch

所以,我不明白为什么插入成功时“没有结果”。在

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


Tags: 数据数据库executeherokuusernamepostgresconn事情
2条回答

您需要发出SELECT查询,以便从数据库中检索数据。在

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

这会给你一些结果。在

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

^{pr2}$

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

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

{{2}将用传递给这个cdtuple}的值替换来自cdtuple}的值。这不仅更安全,而且更易于阅读和维护。在

我不确定您使用什么驱动程序连接到数据库,假设您使用的是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字符串连接,因为它容易受到SQL injection attacks的攻击。在

相关问题 更多 >