Python 错误消息“并非所有参数都在字符串格式化期间转换”是什么意思?

Python 错误消息“并非所有参数都在字符串格式化期间转换”是什么意思?,python,flask,sqlite,Python,Flask,Sqlite,为什么我会收到错误消息 我的代码: from flask import Flask, render_template, g, request, url_for import sqlite3 app = Flask(__name__) app.database = 'cc.db' def connect_db(): return sqlite3.connect(app.database) @app.route('/', methods=['GET', 'POST']) def inde

为什么我会收到错误消息

我的代码:

from flask import Flask, render_template, g, request, url_for
import sqlite3

app = Flask(__name__)
app.database = 'cc.db'

def connect_db():
   return sqlite3.connect(app.database)

@app.route('/', methods=['GET', 'POST'])
def index():
    posts = "0"
    if request.method =='POST':
        name = request.form['nm']
        g.db = connect_db()
        cur = g.db.execute('SELECT * FROM sols WHERE name LIKE '%'', str(name,))
        posts = [dict(name=row[0], color=row[1], size=row[2], location=row[3]) for row in cur.fetchall()]
        g.db.close()

    return render_template('index.html', posts=posts)

if __name__=='__main__':
    app.run()

我正在尝试使用jquery执行自动完成功能。首先,我需要访问数据库。我想不出问题的原因。

你的报价错了。以下不是一个字符串:

'SELECT * FROM sols WHERE name LIKE '%''
这是由%运算符分隔的两个字符串

您要求Python在“SELECT*FROM sols WHERE name LIKE”上使用%运算符,在字符串上使用%执行字符串插值。由于没有可插入的占位符,但您有1个值可插入空字符串,因此您会得到错误

您需要使用双引号或转义嵌入的引号:

"SELECT * FROM sols WHERE name LIKE '%'"
但是,现在您没有SQL参数占位符。您必须将%通配符添加到值中,并使用如下占位符:

cur = g.db.execute('SELECT * FROM sols WHERE name LIKE ?', (name + '%',))

在这里?将替换为第一个参数,该参数设置为名称参数,并附加了%SQL通配符。数据库驱动程序将负责正确引用该字符串。

您的引用错误。以下不是一个字符串:

'SELECT * FROM sols WHERE name LIKE '%''
这是由%运算符分隔的两个字符串

您要求Python在“SELECT*FROM sols WHERE name LIKE”上使用%运算符,在字符串上使用%执行字符串插值。由于没有可插入的占位符,但您有1个值可插入空字符串,因此您会得到错误

您需要使用双引号或转义嵌入的引号:

"SELECT * FROM sols WHERE name LIKE '%'"
但是,现在您没有SQL参数占位符。您必须将%通配符添加到值中,并使用如下占位符:

cur = g.db.execute('SELECT * FROM sols WHERE name LIKE ?', (name + '%',))

在这里?将替换为第一个参数,该参数设置为名称参数,并附加了%SQL通配符。数据库驱动程序将负责正确引用该字符串。

或使用字符串转义:“从名称为\'%\'''@horst666:的sols中选择*或转义嵌入的引号。非常感谢这对我有帮助!或者使用字符串转义:“从名称类似\'%\'@horst666的sols中选择*:或者转义嵌入的引号。非常感谢这对我有帮助!