Python FLASK-第1行“%”(站点id)s”附近的SQL语法有错误

Python FLASK-第1行“%”(站点id)s”附近的SQL语法有错误,python,mysql,flask,Python,Mysql,Flask,我想对烧瓶做一个小小的解释,我不明白。我希望通过ID从数据库中获取数据。ID是我的路由参数。 我已经创建了我的路线,但我有一个错误,我不明白他们实际上要求什么?来自数据库的元素 mysql.connector.errors.ProgrammingError:1064 42000:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取第1行“%site\u ids”附近使用的正确语法 我的路线代码: #Construct app app = Flask(__name__) ap

我想对烧瓶做一个小小的解释,我不明白。我希望通过ID从数据库中获取数据。ID是我的路由参数。 我已经创建了我的路线,但我有一个错误,我不明白他们实际上要求什么?来自数据库的元素

mysql.connector.errors.ProgrammingError:1064 42000:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取第1行“%site\u ids”附近使用的正确语法

我的路线代码:

    #Construct app
app = Flask(__name__)
app.config.from_object('config')
app.config.from_object('secret_config')

#Database functions
def connect_db () :
    g.mysql_connection = mysql.connector.connect(
        host = app.config['DATABASE_HOST'],
        user = app.config['DATABASE_USER'],
        password = app.config['DATABASE_PASSWORD'],
        database = app.config['DATABASE_NAME']
    )

    g.mysql_cursor = g.mysql_connection.cursor()
    return g.mysql_cursor

    def get_db () :
        if not hasattr(g, 'db') :
            g.db = connect_db()
        return g.db

@app.teardown_appcontext
def close_db (error) :
    if hasattr(g, 'db') :
        g.db.close()



@app.route('/historique/<int:site_id>')
def historique(site_id):

db = get_db()

db.execute('SELECT * FROM sites s JOIN historique h ON h.site_id WHERE `s.site_id = %(site_id)s', {'id': site_id})

entries = db.fetchall()
return render_template('historique.html',  entries = entries)
这是我的HTML代码

{% extends 'layout.html' %}

{% block titre %}
    Acceuil
{% endblock %}

{% block body %}
<h1>Historique d'activité pour  {{ entrie.0 }}</h1>
{% for entrie in entries %}
{% endfor %}
{% endblock %}

我只想理解。非常感谢您的帮助。

我想,您在使用sql查询格式化字符串时出错了。 试试这个


是的,s.site\u id前面的反勾号非常可疑。

WHERE后面有一个伪反勾号。在我看来,这是在结束之后。也许这是FLASK的特殊之处,但它看起来不像是有效的SQL。而且,连接谓词在我看来并不正确。。。也许我们想写在h.site\u id=s.site\u id上?在将SQL合并到应用程序之前,我们是否在另一个客户端(如mysql命令行客户端)中测试过SQL?请粘贴整个回溯,而不仅仅是对它的描述。另外,您使用的是哪种数据库?更一般地说,给我们一个,而不仅仅是随机的代码片段和输出。作为我使用的数据库MySQL@Newbiedev,我假设您不使用任何其他库,但如果您感兴趣,我可以扩展我的答案,并展示如何使用SQLAlchemy避免此类问题。
@app.route('/historique/<int:site_id>')
def historique(site_id):
    db = get_db()
    query = 'SELECT * FROM sites s JOIN historique h ON h.site_id WHERE `s.site_id = {site_id}'.format(site_id=site_id)
    db.execute(query)
    # ... rest of the code ...