2012-07-04 54 views
1

我在python中有以下代码。我得到这个错误 - >元组索引必须是整数,而不是strPython传递参数以查询错误

如何将这些值传递给查询?我还有其他的例子,这种方法完美的工作,我不明白为什么它在这里令人失望。

def request_events_json(uei,interval,conn): 

    cur = conn.cursor() 

    events_query ="""select e.nodeid,n.nodelabel,e.ipaddr,count(*) as total,min(e.eventcreatetime),max(e.eventcreatetime),(regexp_matches (e.eventlogmsg,E': %(.*)'))[1] as msglog 
        from events e, node n where e.eventuei = (%s) and e.eventcreatetime > now() - interval (%s) and n.nodeid=e.nodeid 
        group by n.nodelabel,e.nodeid,e.ipaddr,msglog 
        order by e.nodeid, count(*) desc limit 10;""" 



    try: 
     print('## Requesting events ##') 
     cur.execute(events_query,('uei.opennms.org/syslogd/cisco/line','5 min')) 
     ....... 
+0

您使用的是什么postgresql驱动程序? –

回答

1

用我的PostgreSQL版本interval后的圆括号是禁止的。

更新:

这是正则表达式中的百分号。加倍吧。

+0

psycopg2和postgres是8.4.3。如果我将查询更改为events_query =“”“,请从eventuei =(%s)和eventcreatetime> now() - 事件中选择nodeid;”“”它可以工作... – user1501398

+0

我将正则表达式部分和它的工作(regexp_matches(e.eventlogmsg,E':%(。*)'))[1]作为msglog ...任何人都可以帮助我如何维护此部分并将参数传递给查询? – user1501398

+0

也许在你的正则表达式中加倍'%'会有帮助。 'E':%%(。*)'' –