Mysql-Python复杂查询导致空集

时间:2015-05-22 15:40:51

标签: python mysql innodb

我们有一个过去4年来运行舒适的脚本。它从SugarCRM应用程序中提取大量数据,然后打印一些报告。

我使用Python-MySQLDB来提取数据。

  db = mdb.connect('localhost', db_user, db_pass, db_name)
  c = db.cursor()
  statement = "
select a.email_address
     , c.hits
     , c.activity_date
     , c.activity_type 
  from email_addresses a
     , campaign_log c
     , email_addr_bean_rel r
 where c.target_id = r.bean_id 
   and r.email_address_id = a.id 
   and c.activity_type = 'targeted' 
   and c.campaign_id ='%s'
"%x
  c.execute(statement)
  rows = c.fetchall()

问题是在MySQL shell和phpmyadmin上都会执行SQL查询,并将正确的值作为结果投放。

但是在python shell上

>>rows
>>()

除了SugarCRM版本在几周前更新,甚至在更新后,事情仍然正常。

可能是什么问题?难道新版本有一些InnoDB表吗?

我很难过。欢迎任何指导。

编辑 - 我复制了一个SQL查询语句,该语句在mysql shell和phpmyadmin窗口都正确执行,然后运行它,结果是一样的。它显示一个空元组,并且没有可用的SQL记录。

我确定问题不在于传递字符串,因为这是每个人似乎都在暗示的方向。

2 个答案:

答案 0 :(得分:2)

如果您的SQL查询需要参数" c.campaign_id ='%s'",您应该在" c.execute(声明)&#34中指定它;,例如:

c.execute(statement, (42))

答案 1 :(得分:0)

我想出了这个问题。我将python-MySql版本升级到最新版本。它至少设法告诉我其中一个MySQL表出错。 修复了MySQL Table,一切正常。

对于任何遇到类似问题的人,建议使用pip安装最新的MySQL-python。确保在安装pip之前安装。

sudo apt-get install libmysqlclient-dev python-dev