SQL返回额外的d

2024-03-28 22:44:23 发布

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

嘿,我想知道是否有人能帮助一个初学者学习SQL和Python。我以为我对这件事有相当的了解,不过最近发生了一些奇怪的事。在

以下是从较大部分截取的以下代码:

  try:
      self.db.query("SELECT * FROM account WHERE email = '{0}' AND pass = '{1}'".format(self.mail.strip(self.bchars),self.pw.strip(self.bchars)))
  except MySQLdb.Error, e:
      print "Error %d: %s" % (e.args[0], e.args[1])

  exists = self.db.store_result().fetch_row()
  print "EXISTS",exists

它用来打印:

^{pr2}$

现在,它打印了这个: 它用来打印:

^{3}$

我不知道我是从哪里来的。我检查了SQL数据库,甚至重新加载了它以确定。我已经恢复了前一天的所有代码(所有代码都在运行),但仍然找不到解决方案。我也尝试过搜索,但我甚至不知道这个问题叫什么,所以很难搜索。感谢任何人提供的帮助或信息。在


Tags: 代码fromselfdbsqlexistsargserror
3条回答

SQL中的数据是long类型吗?在

正如您在tuple中看到的,它们仍然是有效的数字,而不是字符串,因此这不应该引起任何问题。在

我认为,python的dbapi应该总是返回整数字段。在

不管怎样,10L、5L等等是repr(在您的情况下,它用于元组的每一项)的长时间工作方式。在

还有一件事。我明白了,你在用MySQLdb。在这种情况下,我强烈建议您停止使用c-api包装器,而是使用“real”接口,该接口具有所有自动转换/转义和其他一些奇妙的功能(dict游标就是其中之一)。在

这将为您节省很多麻烦,并使您的代码更加稳定/安全。简而言之,忘了mysql。相信我。在

您的示例可以重写如下(使用适当的接口):

import MySQLdb

db = MySQLdb.connect(host=your_host, db=your_db,
                     user=your_user, passwd=your_password)

cur = db.cursor()
cur.execute("""SELECT * FROM account WHERE email = %s AND pass = %s """,
            (self.mail, self.pw))
result = cur.fetchall()
print "exists:", result

这与您正在做的一样(除了错误处理),但是没有手动的字符串格式化、转义等等。在

我知道,这可能会因为无关紧要而被否决,但如果这个答案能帮助一个单身的人开始使用正确的数据库api,那将是非常棒的。在

2L是2的长版本:不同的对象但值相同。在

>>> print 2L == 2
True

>>> print 2L is 2
False

您运行的是相同的(python、packages、db、OS…)?在

相关问题 更多 >