是什么导致NOT EQUAL and IN组合查询在MySQL中工作正常,而在Python中忽略了第一个条件?
我正在编写一个Python脚本来在MySQL表上运行查询。高水位流量如下所示:是什么导致NOT EQUAL and IN组合查询在MySQL中工作正常,而在Python中忽略了第一个条件?,python,mysql,sql,ubuntu-12.04,Python,Mysql,Sql,Ubuntu 12.04,我正在编写一个Python脚本来在MySQL表上运行查询。高水位流量如下所示: mywebsite.com/blog 1 0 mywebsite.com/help 2 0 创建数据库 创建表 在表中插入条目 根据某些条件查询表以获取插入项的主键 例如,我将把这些数据插入表中: page_URL page_type> mywebsite.com/blog 0 mywebsite.com/help 0 notmywebsite.co
mywebsite.com/blog 1 0
mywebsite.com/help 2 0
创建数据库
创建表
在表中插入条目
根据某些条件查询表以获取插入项的主键
例如,我将把这些数据插入表中:
page_URL page_type>
mywebsite.com/blog 0
mywebsite.com/help 0
notmywebsite.com 98
然后我运行以下查询:
SELECT
page_URL, pageID, page_type
FROM dim_all_pages
WHERE
page_type != 98
AND page_URL IN ('mywebsite.com/blog', 'notmywebsite.com', 'mywebsite.com/help')
正如预期的那样,我得到的结果如下:
mywebsite.com/blog 1 0
mywebsite.com/help 2 0
但是,当我通过Python运行查询时,我得到以下结果:
mywebsite.com/blog 1 0
mywebsite.com/help 2 0
notmywebsite.com 3 98
这毫无意义!下面是我的代码的样子:
query = ["INSERT INTO dim_all_pages (page_URL, page_type) VALUES ( "]
query.append("SELECT page_URL, pageID, page_type FROM dim_all_pages WHERE page_type != 98 AND page_URL IN ( ")
for index, item in enumerate(page_list):
query[0] = query[0] + "'" + item + "' , " + page_type(item) + " )"
query[1] = query[1] + "'" + item + "'"
if index + 1 < len(page_list):
query[0] += ' , ( '
query[1] += ' , '
query[1] += ' )'
try:
# Insert pages
con = get_con(loc,user,pw)
cur = con.cursor()
cur.execute(query[0])
# Create PSP
cur.execute(query[1])
psp = cur.fetchall()
# Commit queries
con.commit()
except mdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
知道我做错了什么吗?这正在扰乱我的头脑 我还将Python生成的查询复制粘贴到MySQL中并运行了它,效果很好!您能在try语句开始之前显示printquery的输出吗?您将查询构建为一个字符串,而不使用SQL参数,这始终是一项危险的工作。也许您没有构建您认为正在构建的查询?输出与我发布的查询相同。我将printquery[1]的输出复制粘贴到MySQL中并运行它,它工作得很好。这一定是我在Python中做错的事情。我还将研究SQLAlchemy,看看是否可以找到更好的方法来实现这一点。除了SQL参数外,还需要研究str.join方法来使用分隔符构建字符串。