我正在使用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'})
在这里,我需要知道如何在查询中引用from
和to
,例如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
答案 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'])