db.execute(更新表)不适用于 Python
Posted
技术标签:
【中文标题】db.execute(更新表)不适用于 Python【英文标题】:db.execute (UPDATE TABLE) not working with Python 【发布时间】:2020-07-27 10:24:03 【问题描述】:SELECT 命令正在工作
engine = create_engine("postgresql://user:password@localhost:5432/table")
db = scoped_session(sessionmaker(bind=engine))
username = db.execute(
"SELECT person.username FROM person join contact0 ON person.id=contact0.id WHERE email =
:address", "address": address).fetchall()
password = request.form.get("password")
password = generate_password_hash(password)
此命令未更新,我收到编程错误,假定 SQL 命令存在语法错误。
我的语法错误可能是什么?
db.execute("UPDATE TABLE person SET password = :password VALUES (:password) WHERE username =
:username", "password": password, "username": username)
db.commit()
【问题讨论】:
我不是!它们是散列的。第一个框的最后一行是我散列更新密码的地方。VALUES (:password)
子句不属于您的 UPDATE 语句。只需将其删除。
@GordThompson 我试着这样做,然后又做了一次。这是我收到的错误 sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'RowProxy' 该语句仍然不正确。 db.execute("UPDATE TABLE person SET password = :password WHERE username = :username", "password": password, "username": username)
什么是type(username)
?如果是list
,那么type(username[0])
是什么?
这在一定程度上有所帮助!用户名是字典,我写了用户名[0],错误切换到这个((RowProxy类型的对象不是JSON可序列化的))这个错误似乎更合理)
【参考方案1】:
我认为您的更新查询中不需要“TABLE”。您可能复制粘贴了它,而原来使用 TABLE 作为“your_table”的占位符。
试试这个
db.execute("UPDATE person SET password = :password WHERE username = :username", "password": password, "username": username)
db.commit()
此外,由于您使用的是 SQLAlchemy,因此您可以使用 query = person.update(**values)
语句,该语句可以使用 query.where(getattr(person.c, k) == v)
进行扩展,以非常动态地更新任意数量的 where 语句和值。
【讨论】:
我试过了! db.execute("UPDATE person SET password = :password WHERE username = :username", "password": password, "username": username) 这是一个命令,我也做了同样的事情并添加了 VALUE (:password ) 到命令。仍然有错误。从 SQL 中提取凭据让我很痛苦,但我不断收到错误的查询 将命令放入 try: except Exception as e 并向我们展示 e 所说的内容。这应该真的有效......以上是关于db.execute(更新表)不适用于 Python的主要内容,如果未能解决你的问题,请参考以下文章