【问题标题】:Returning a tuple from a query using python [duplicate]使用python从查询中返回一个元组[重复]
【发布时间】:2016-09-18 15:52:44
【问题描述】:

我目前正在使用 python 和 Flask 来查询数据库。我有以下功能:`

def get_details(username):

  conn = database_connect()
  if(conn is None):
      return ERROR_CODE
  cur = conn.cursor()
  val = None

  try:
     cur.execute("""SELECT username, name, age, address
                    FROM users
                    WHERE username = %s;""",(username))

     val = cur.fetchone()
  except:
     print("failed to retrieve")

  cur.close()
  conn.close()
  return val

“users”表中的用户名是主键,因此此查询仅返回一个元组(通过在 postgress 中手动查询确认)。但是“val”始终是“none”。我也尝试过使用 fetchall() 但这也不起作用。

查询本身有问题吗?我应该如何编码?

【问题讨论】:

  • 当它打印出“检索失败”时,您应该已经看到出了问题。下一步是根本不捕获该异常,因为回溯有有用的信息。

标签: python mysql database flask


【解决方案1】:

您将查询参数传递给查询的方式存在问题。在一个元组中传递它们:

cur.execute("""SELECT username, name, age, address
               FROM users
               WHERE username = %s""", (username, ))
                       # comma is important HERE^

附带说明,请考虑使用 ORM,而不是直接访问数据库并手动构建 SQL 查询。有一个相关的包供你探索:flask-sqlalchemy

【讨论】:

  • 谢谢,这成功了!您介意解释一下参数中附加逗号背后的含义吗?
  • cursor.execute() 接受一个字符串和一个元组参数。一元组很特殊:wiki.python.org/moin/TupleSyntax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多