'errorcode' не определен, тогда как запрос выглядит нормально - PullRequest
0 голосов
/ 02 мая 2019

С этим чатботом в какой-то момент разговора я хочу сделать SQL-запрос, в файле actions.py , для популярной и таблицы базы данных MySQL, но это возвращает терминал, у которого есть ошибка в моем синтаксисе SQL при выполнении cursor.execute в моем запросе SQL:

        print("before execute")
        cursor = cnx.cursor()

        # add new booking
        add_booking = ("INSERT INTO reservations "
                      "(name_room, hour_start, hour_end) "
                      "VALUES (%s, %s, %s)")
        cursor.execute(add_booking)
        print("after execute")

Я использую значения blue 5-1-2019 2pm 30 minutes, и я не понимаю, почему у меня есть синтаксическая ошибка. Фактически, цель состоит в том, чтобы ввести имя (синее), дату входа и дату выхода в базу данных со следующей структурой:

mysql> DESCRIBE reservations;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| name_room  | varchar(100) | NO   |     | NULL    |       |
| hour_start | varchar(100) | NO   |     | NULL    |       |
| hour_end   | varchar(100) | NO   |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.06 sec)

Он всегда работал, как вы можете видеть из старых данных здесь:

mysql> SELECT * FROM reservations;
+-----------+---------------------------+---------------------------+
| name_room | hour_start                | hour_end                  |
+-----------+---------------------------+---------------------------+
| blue      | 2019-04-18T14:00:00+00:00 | 2019-04-18T14:30:00+00:00 |
| blue      | 2019-04-20T09:00:00+00:00 | 2019-04-20T09:30:00+00:00 |
| blue      | 2019-04-30T13:00:00+00:00 | 2019-04-30T13:30:00+00:00 |
| blue      | 2019-05-01T14:00:00+00:00 | 2019-05-01T14:30:00+00:00 |
+-----------+---------------------------+---------------------------+
4 rows in set (0.00 sec)

Вот что возвращает терминал

(staenv) C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack>python -m rasa_core_sdk.endpoint --actions actions
2019-05-01 17:46:10 INFO     __main__  - Starting action endpoint server...
2019-05-01 17:46:20 INFO     rasa_core_sdk.executor  - Registered function for 'action_joke'.
2019-05-01 17:46:20 INFO     rasa_core_sdk.executor  - Registered function for 'action_room'.
2019-05-01 17:46:20 INFO     __main__  - Action endpoint is up and running. on ('0.0.0.0', 5055)
inside run
before booking_answer
blue 5-1-2019 2pm 30 minutes
query_select_all:
SELECT * FROM reservations
date: 2019-05-01T14:00:00+00:00
date: 2019-05-01T14:30:00+00:00
cur_select_all:
CMySQLCursorBuffered: SELECT * FROM reservations
start_time:  2019-04-18T14:00:00+00:00
end_time:  2019-04-18T14:30:00+00:00
date: 2019-04-18T14:00:00+00:00
date: 2019-04-18T14:30:00+00:00
start_time:  2019-04-20T09:00:00+00:00
end_time:  2019-04-20T09:30:00+00:00
date: 2019-04-20T09:00:00+00:00
date: 2019-04-20T09:30:00+00:00
start_time:  2019-04-30T13:00:00+00:00
end_time:  2019-04-30T13:30:00+00:00
date: 2019-04-30T13:00:00+00:00
date: 2019-04-30T13:30:00+00:00
Hey, I just checked and the room is available :-)
booking_answer : True
before connexion
before execute
before execute
[2019-05-01 18:10:07,717] ERROR in app: Exception on /webhook [POST]
Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\connection_cext.py", line 395, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s, %s)' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\actions.py", line 72, in run
    cursor.execute(add_booking)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\cursor_cext.py", line 266, in execute
    raw_as_string=self._raw_as_string)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\connection_cext.py", line 398, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s, %s)' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask_cors\decorator.py", line 128, in wrapped_function
    resp = make_response(f(*args, **kwargs))
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\rasa_core_sdk\endpoint.py", line 86, in webhook
    response = executor.run(action_call)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\rasa_core_sdk\executor.py", line 177, in run
    events = action(dispatcher, tracker, domain)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\actions.py", line 75, in run
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
NameError: name 'errorcode' is not defined
2019-05-01 18:10:07 ERROR    flask.app  - Exception on /webhook [POST]
Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\connection_cext.py", line 395, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s, %s)' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\actions.py", line 72, in run
    cursor.execute(add_booking)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\cursor_cext.py", line 266, in execute
    raw_as_string=self._raw_as_string)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\connection_cext.py", line 398, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s, %s)' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\flask_cors\decorator.py", line 128, in wrapped_function
    resp = make_response(f(*args, **kwargs))
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\rasa_core_sdk\endpoint.py", line 86, in webhook
    response = executor.run(action_call)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\rasa_core_sdk\executor.py", line 177, in run
    events = action(dispatcher, tracker, domain)
  File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\actions.py", line 75, in run
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
NameError: name 'errorcode' is not defined

1 Ответ

0 голосов
/ 02 мая 2019

Хотя мы не можем полностью проверить ваш код, чтобы убедиться, что используемый вами запрос верен, похоже, ошибка в следующей строке:

File "C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\staenv\lib\site-packages\mysql\connector\connection_cext.py", line 395, in cmd_query raw_as_string=raw_as_string)_mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s, %s)' at line 1

Увидев эту ошибку в трассировке стека, я проверил ваш запрос. Я бы написал по-другому:

sql = "INSERT INTO reservations (name_room, hour_start, hour_end) VALUES (%s, %s, %s)"
val = ("blue", "5-1-2019", "2pm 30 minutes")
mycursor.execute(sql, val)

Кроме того, ради хорошей практики кодирования, пожалуйста, не используйте varchar для атрибута, который должен иметь значение даты и времени. Именно поэтому существуют разные типы данных.

...