我试图遍历Python列表,以便在MySQL中有多个查询,但是“%s”参数包含引号,并且我的查询中只有0(0)(当我知道应该得到一个不同的数字时)。在
代码:
def export_data():
infos = [
'Conta Corrente Itau',
'Cartao Itau Master',
'Cartao Itau VISA',
'Carteira'
]
chart_of_accounts = list(infos)
for account in chart_of_accounts:
cnx = mariadb.connect(user='root', password='', database='base_completa')
cursor = cnx.cursor()
params = (account, account)
query = """
SELECT Y, M,(@total := @total + Fluxo) AS ValorTotal
FROM (
SELECT year(data) AS Y, month(data) AS M,
(
SUM(IF(Credito="%s", valor, 0))-
SUM(IF(Debito="%s", valor, 0))
) AS Fluxo
FROM ledger
GROUP BY YEAR(DATA), MONTH(DATA)
) AS T,
(SELECT @total:=0) AS n;
""" % (params)
cursor.execute(query)
rows = cursor.fetchall()
desc = cursor.description
lista = [dict(itertools.izip([col[0] for col in desc], row))
for row in rows]
cnx.commit()
print account
print json.dumps(lista)
return lista
results = export_data()
我也试过:
^{pr2}$但我还是得零分。 我认为它在参数中包含了引号,因此它正在进行的查询是:
SUM(IF(Credito=""Conta Corrente Itau"", valor, 0))
编辑:(实际上,它没有将list元素传递给查询,因此它在查询:
SUM(IF(Credito="%s", valor, 0))
但我不确定。在
除此之外,它似乎工作得很好,因为我的“检查指纹”给了我预期的结果。在
已解决:
当MySQL查询中有多个参数时,我发现有一个线程回答了我的问题:添加一个聚合参数的“params”变量。在
params = (account, account)
然后在查询(""")
结束后添加% (params)
用一个有效的代码更新了代码。 仍然不知道这是好的做法还是最好的方法,但它是有效的。在
决议:
当MySQL查询中有多个参数时,我发现有一个线程回答了我的问题:添加一个聚合参数的“params”变量。在
然后在查询结束后添加
% (params)
("""
)用一个有效的代码更新了代码。仍然不知道这是好的做法还是最好的方法,但它是有效的。在
游标不允许执行多个查询。在
代替
cursor = cnx.cursor()
请尝试以下操作:您还可以轻松地从输出创建数据帧,如下所示:
^{pr2}$请确保您的查询以
";"
分隔,并且不要将";"
放在最后一个查询之后,否则它将失败。在编辑
在这里,您需要从文件中的
query=...
语句中获取脚本_名称.sql文件。 按照这种方式编写,您需要的数据应该以(temp)表结束,这样您只需调用以下命令即可获得数据:相关问题 更多 >
编程相关推荐