我们有一个过去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记录。
我确定问题不在于传递字符串,因为这是每个人似乎都在暗示的方向。
答案 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