【问题标题】:Python with Sqlite 3, how to extract only text, without 'u?带有Sqlite 3的Python,如何只提取文本,没有'u?
【发布时间】:2017-07-17 16:14:29
【问题描述】:

我有以下代码:

password_master  = str(self.master_password.text())
username = str(self.comboBox.currentText())
result = c.execute("SELECT * FROM register_table WHERE MASTER = '"+password_master+"' AND USERNAME = '"+username+"'")
if (len(result.fetchall()) > 0):
   print("user found")
   password_check = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchall()
   password = str(password_check)
   login(username, password)

我只想从“password_check”查询中提取文本,因为我需要将变量“password”传递给“login”函数。 我尝试了所有方法,但总是收到以下输出:

[(u'@-passwordtest-@',)]

有没有办法简单提取

passwordtest

提前非常感谢!!!

【问题讨论】:

  • not开始,在结果行上使用str()。您只需要获取 一个 行,因此也不要全部获取。
  • u 不在数据中。当您打印出数据结构时,这就是 python 表示数据的方式。它是打印的神器(即:将数据项列表转换为字符串)
  • 要详细说明@BryanOakley 所说的,这只是Python 告诉您引号中的字符串是unicode 字符串 的方式。 u 不是日期的一部分,只是它的打印方式。
  • 谢谢你们!!!!当我看到打印结果时我停下来...现在一切正常,我也删除了 fetchall...再次非常感谢!!!!

标签: python python-2.7 sqlite ascii


【解决方案1】:

首先,我将从标准的SQL Injection 警告开始。当然,这看起来不像是面向网络的,但仍然如此。您应该使用绑定变量。

其次,您的查询将返回一个值数组,因此您尝试在包含字符串的数组上运行 str() 函数。我会替换这些行:

password_check = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchall()
password = str(password_check)

与:

results = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchone()
password = results[0]

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多