说我的查询如下:
q = SELECT * FROM MY_TABLE WHERE FIELD LIKE ?
cursor.execute(q, some_query_value)
这似乎没有进行“包含”搜索,所以我试着这样做
q = SELECT * FROM MY_TABLE WHERE FIELD LIKE %?%
cursor.execute(q, some_query_value)
但是python似乎并不喜欢这个。这样做的正确方法是什么?
答案 0 :(得分:5)
%
通配符是要插值的值的一部分;使用字符串连接或格式将其添加到要搜索的值中,而不是在查询中:
q = "SELECT * FROM MY_TABLE WHERE FIELD LIKE ?"
cursor.execute(q, ('%' + some_query_value + '%',))
或
q = "SELECT * FROM MY_TABLE WHERE FIELD LIKE ?"
cursor.execute(q, ('%{}%'.format(some_query_value),))
现在sqlite3
可以正确引用带通配符的值进行插值。
答案 1 :(得分:5)
尝试在查询字符串周围添加引号并在查询值中放置通配符:
TID: [0] [ESB] [2015-04-24 09:18:31,100] ERROR {org.apache.synapse.transport.passthru.util.RelayUtils} - Error while building Passthrough stream {org.apache.synapse.transport.passthru.util.RelayUtils}
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: DOCTYPE is not allowed
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.om.impl.llom.OMDocumentImpl.getOMDocumentElement(OMDocumentImpl.java:109)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:570)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:566)
at org.apache.axis2.builder.ApplicationXMLBuilder.processDocument(ApplicationXMLBuilder.java:81)
at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:118)
at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:116)
at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:91)
at org.apache.synapse.transport.passthru.util.TraceMessageBuilderDispatchHandler.build(TraceMessageBuilderDispatchHandler.java:73)
at org.apache.synapse.transport.passthru.util.TraceMessageBuilderDispatchHandler.invoke(TraceMessageBuilderDispatchHandler.java:64)
at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
at org.apache.axis2.engine.Phase.invoke(Phase.java:313)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261)
答案 2 :(得分:2)
这是一个独立的示例,演示如何使用通配符进行查询。
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('create table methodists (name text)')
c.executemany("insert into methodists VALUES (?)",
[['George Lucas'], ['George W. Bush'], ['W. C. Handy']])
c.execute('select name from methodists where name like ?', ['George%'])
print ', '.join(name for name, in c.fetchall())
c.execute('select name from methodists where name like ?', ['%W.%'])
print ', '.join(name for name, in c.fetchall())
结果:
George Lucas, George W. Bush
George W. Bush, W. C. Handy