Mysql-Python 复杂查询导致空集

Mysql-Python complex query resulting in empty set

我们有一个脚本,在过去 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()

问题是 SQL 查询同时在 MySQL shell 和 phpmyadmin 上执行并抛出正确的值作为结果。

但是在 python shell

>>rows
>>()

除了几周前更新了 SugarCRM 版本,甚至在 post 更新之后一切都运行良好。

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

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

编辑——我复制了一个 SQL 查询语句,它在 mysql shell 以及 phpmyadmin window 和 运行 上都正确执行它,和结果是一样的。它显示一个空元组,没有 SQL 条记录可用。

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

如果您的 SQL 查询需要一个参数 "c.campaign_id ='%s'",您应该在 "c.execute(statement)" 中指定它,例如:

c.execute(statement, (42))

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

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

sudo apt-get install libmysqlclient-dev python-dev