如何从Sqlite中检索带有撇号的值

时间:2013-07-19 20:16:53

标签: python sql quotes

我有一个我试图用Python访问的Sqlite3表。一切都运行良好,除了一个表列,其中值包含撇号(例如乔治)。

我已经解决了SQL

"SELECT * FROM table WHERE column1 = '" + value1 + "' and column2 = '" + value2 + "'"

value2 = George's时会出现语法错误。

这是什么样的Python语法?

3 个答案:

答案 0 :(得分:1)

使用反斜杠来逃避撇号。例如:

select * from tablename where columnname='George\'s'

答案 1 :(得分:1)

首先:必须链接:Exploits of a Mom

为了避免这种情况,你应该使用占位符。这是一个python问题,所以python回答:

>>> import sqlite3
>>> con = sqlite3.connect(':memory:')
>>> cur = con.cursor()
>>> cur.execute("select ?", ['this contains quotes: "\'"']).fetchall()
[(u'this contains quotes: "\'"',)]

对于查询的非动态部分,“转义”机制是将引号加倍:

>>> cur.execute("select ''''").fetchall()
[(u"'",)]

?是sqlite和其他许多其他人的占位符,但是对于您实际使用的数据库,正确的占位符可能不同。其他常见语法是:param(PostgreSQL)和%s(MySQL)

答案 2 :(得分:0)

执行此操作的一种好方法是在查询中使用占位符来真正避免SQL injection

的问题

这是一个简单的例子:

<强>码

#!/usr/bin/env python

import sqlite3

dbc = sqlite3.connect('test.db')
c   = dbc.cursor()

name  = "george's"
query = "select * from names where name = ?"

c.execute(query, (name,))

for row in c.fetchall():
    print row

输出包含DB中行的元组:

(1, u"george's")

sqlite3表:

sqlite> .schema names
CREATE TABLE names(id integer primary key asc, name char);

sqlite> select * from names;
1|george's
2|dave
3|george