FLASK - у вас есть ошибка в вашем синтаксисе SQL около '% (site_id) s' в строке 1 - PullRequest
0 голосов
/ 25 апреля 2018

Мне бы хотелось получить небольшое объяснение о Flask, что-то, чего я не понимаю.Я ищу, чтобы получить данные из базы данных по идентификатору.Идентификатор - это мой параметр маршрута.Я создал свой маршрут, но у меня ошибка, и я не понимаю, что они запрашивают на самом деле?Элемент из базы данных?

mysql.connector.errors.ProgrammingError: 1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с «% (site_id) s» в строке 1

Мой код маршрута:

    #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 %}

Мне только нравится понимать.Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, у вас ошибка при форматировании строки с помощью SQL-запроса.Попробуйте это

@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 ...

И да, этот пробел до s.site_id очень очень подозрительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...