Серверу Flask требовался перезапуск при внесении некоторых изменений в БД?

#python #flask

#python #flask

Вопрос:

Я использую Flask для создания веб-сервиса.Когда я вношу некоторые изменения в DB, мне нужно перезапустить сервер flask.

 db = pymysql.connect("localhost","root","","posdata")
db1 = pymysql.connect("localhost","root","","posdata")
  

Также мне нужно создать два соединения с БД для работы какой-либо функции.Если я использую только одно соединение (говорит db, как указано выше), я получаю

 `InterfaceError (0, '')`
  

итак, чтобы справиться с InterfaceError, я создал два соединения с БД.Но теперь проблема в том, что когда я вношу некоторые изменения в DB, db работает нормально, но db1 не работает, мне нужно было перезапустить сервер flask, чтобы соединение с db1 заработало.

 @app.route('/data_url/<customer_name>')
def data(customer_name):
    cursor = db.cursor()
    cursor.execute(" select country_name from countries as c, customers as cu where c.c_id = cu.c_id and cu.customer_id = '%s' " % customer_name)
    data =  cursor.fetchall()
    data = [x[0] for x in data]
    return jsonify(data)


**# query to select TYPE attribute from DB and send it to ajax**

@app.route('/url_for/<customer_name>')
def dt(customer_name):
    cursor = db1.cursor()
    cursor.execute(" select type from customers where customer_id = '%s' " % customer_name)
    data =  cursor.fetchall()
    data = [x[0] for x in data]
    return jsonify(data)
  

здесь, чтобы заставить @app.route(‘/url_for /’) работать, мне нужно перезапустить сервер flask.

Трассировка ошибки при использовании единственного подключения к БД

 Traceback (most recent call last):
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflask_compat.py", line 35, in reraise
    raise value
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflask_compat.py", line 35, in reraise
    raise value
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagesflaskapp.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:UsersOneDrive -DesktopProjectTestAppapp.py", line 34, in Request
    cursor.execute('select customer_id from customers')
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagespymysqlcursors.py", line 170, in execute
    result = self._query(query)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagespymysqlcursors.py", line 328, in _query
    conn.query(q)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagespymysqlconnections.py", line 516, in query
    self._execute_command(COMMAND.COM_QUERY, sql)
  File "C:UsersAppDataLocalProgramsPythonPython36libsite-packagespymysqlconnections.py", line 750, in _execute_command
    raise err.InterfaceError("(0, '')")
pymysql.err.InterfaceError: (0, '')
  

Комментарии:

1. Это хорошая большая цель для внедрения SQL. Не используйте форматирование строк для запросов

2. Я также не понимаю, какая разница между двумя соединениями. Это не похоже на практический подход к решению проблемы

3. @roganjosh .. да, я знаю, что наличие двух подключений не является практичным подходом к решению проблемы, но я должен использовать это, потому что, если я использую только одно соединение, я получаю InterfaceError. Дело в том, что в моем интерфейсе у меня есть выпадающий список клиентов, и на основе выбранного клиента я автоматически заполняю поля на HTML-странице (приведенный выше код предназначен для автоматического заполнения двух полей), поэтому, когда я использую одно соединение для обоих @app.route () и выбираю какое-либо имя из выпадающего списка несколько раз (например, выбирая одно за другим в течение нескольких секунд), я получаю InterfaceError.

Ответ №1:

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

Комментарии:

1. я не меняю код в Flask app.py. Я добавляю данные в базу данных. недавно добавленные данные не отражаются во внешнем интерфейсе, если я использую два соединения для DB, а когда я использую одно соединение, я получаю InterfaceError

2. чтобы получить недавно добавленные данные во внешнем интерфейсе, мне нужно перезапустить сервер flask

3. проверьте описание вопроса, я обновил обратные ссылки на ошибки

4. Нет … я все еще получаю ошибку… единственный способ, который я получил, — использовать соединение с двумя БД

Ответ №2:

ДА. Вам необходимо перезапускать ваш сервер flask каждый раз, когда вы вносите изменения в любой из исходных файлов.

Комментарии:

1. хорошо .. тогда как я могу перезапускать сервер, скажем, каждые x минут?

2. Используете ли вы сервер разработки Flask или какой-либо другой сервис поверх протокола WSGI?

3. Нет .. я не использую никакой другой сервис поверх протокола WSGI

Ответ №3:

Попробуйте использовать приведенную ниже команду. Это работает

 pymysql.connect(host = "localhost", user = "your_mysql_username", password = "your_password", database = "your_database_name", autocommit=True)