如何在python中的mysql查询上引用dict变量值

时间:2018-06-24 10:44:42

标签: python

我正在使用python开发mysql连接器,我正在使用dict {'invoice.approved_on': {'to': '2018-1-11 23:59:00', 'from': '2017-5-13 00:00:00'},但是我不确定如何在我用%(invoice.approved_on[from])s AND %(invoice.approved_on[to])s)尝试过的查询中引用它,但无法正常工作,请告诉我如何在python中查询查询时引用dict值

cursor = self.conn.cursor()
cursor.execute('SELECT invoice.`id` AS `invoice.id` from invoice where invoice.`approved_on` BETWEEN %(invoice.approved_on[from])s AND %(invoice.approved_on[to])s) GROUP BY invoice.id', {'invoice.approved_on': {'to': '2018-1-11 23:59:00', 'from': '2017-5-13 00:00:00'})

在这里,我需要知道如何在查询中引用fromto,例如invoice.approved_on [from]或invoice.approved_on.from或invoice.approved_on.0

它抛出如下错误

 [ERROR] 2018-06-24 16:03:06,701 <erp.accounts.reportsQueryBuilder> 'invoice.approved_on.0'
Traceback (most recent call last):
  File "/home/charles/PycharmProjects/2.8/XSerp/util/reportsQueryBuilder.py", line 183, in select
    ), where)
  File "/home/charles/.virtualenvs/venvpython/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 185, in execute
    for key, item in args.iteritems())
KeyError: 'invoice.approved_on.0'
[ERROR] 2018-06-24 16:03:06,703 <erp.middleware> Exception Handling: local variable 'response' referenced before assignment

1 个答案:

答案 0 :(得分:0)

your_dict = {'invoice.approved_on': {'to': '2018-1-11 23:59:00', 'from': '2017-5-13 00:00:00'}
cursor.execute(f'SELECT invoice.`id` AS `invoice.id` from invoice where invoice.`approved_on` BETWEEN {your_dict['invoice.approved_on']['from']} AND {your_dict['invoice.approved_on']['to']} ) GROUP BY invoice.id')

如果您使用的是python3,则可以使用上面列出的fstrings

如果您使用的是python2(看起来像您一样)或需要向后兼容,请使用.format()

your_dict = {'invoice.approved_on': {'to': '2018-1-11 23:59:00', 'from': '2017-5-13 00:00:00'}
cursor.execute('SELECT invoice.`id` AS `invoice.id` from invoice where invoice.`approved_on` BETWEEN {} AND {} ) GROUP BY invoice.id'.format(your_dict['invoice.approved_on']['from'], your_dict['invoice.approved_on']['to'])