Я пытаюсь создать простое веб-приложение Flask, которое запрашивает db postgres и вставляет/удаляет данные. Я даже не уверен в обновлении/вставке, но, как минимум, я просто запрошу db. Я не хочу использовать ORM, потому что это довольно просто. Я хочу использовать psycopg2
, так как я использовал его раньше в моем простом приложении python. Теперь я хочу знать, как и когда я должен открыть и закрыть соединение db. Я видел это: http://flask.pocoo.org/docs/0.12/tutorial/dbcon/, но в нем не было ответа.Flask + Postgresql и открытие/закрытие соединения db
ответ
http://flask.pocoo.org/docs/0.12/patterns/sqlite3/ обеспечивает лучший пример. Его для sqllite, но все, что отличается, - это то, как устанавливается начальное соединение. Так, где он использует sqllite3
, положить psycopg2
звонки в:
import sqlite3
from flask import g
DATABASE = '/path/to/database.db'
@app.before_request
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
Вы можете найти полностью рабочий пример кода, показывающий использование БД здесь: https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.py. Обратите внимание, что пример установления соединения db вручную по запросу в методах @app.route
, тогда как в приведенном выше примере используется крюк @app.before_request
, чтобы установить его до вызова методов маршрута.
Вы сказали, что не хотите ОРМ, но вы также можете использовать SQLAlchemy
в нерабочем режиме: https://docs.sqlalchemy.org/en/latest/core/tutorial.html. Преимущество этого в том, что существуют конкретные session
объекты для управления db connectio: http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/
- 1. Тесты флаконов с SQLAlchemy и PostgreSQL исчерпывают соединения db
- 2. Соединения PHP и db
- 3. Flask auto-reconnect PostgreSQL
- 4. Ошибка соединения при создании db
- 5. Glassfish, PostgreSQL и закрытые соединения
- 6. Ошибка соединения BLToolkit PostgreSql
- 7. Pyramid Postgresql Проблема соединения
- 8. Пауза и возобновление соединения PostgreSQL в NodeJS
- 9. Ошибка соединения с heroku db: push with postgresql
- 10. Соединения и транзакции Hibernate и cassandra db
- 11. Flask-MySQLdb вызывает _mysql_exceptions.ProgrammingError: закрытие закрытого соединения
- 12. Создать PostgreSQL DB при подключении
- 13. Postgresql соединения в Sinatra
- 14. Flask-SQLAlchemy и Gevent не закрывают соединения mysql
- 15. Flask - как я могу объединить Flask-WTF и Flask-SQLAlchemy для редактирования моделей db?
- 16. Закрытие соединения DataMapper DB
- 17. Инициализация соединения db - nodejs
- 18. Закрытие соединения с DB
- 19. Длинные соединения DB или соединения по требованию?
- 20. Flask Postgresql массив не постоянно обновляется
- 21. Grails postgresql db connection
- 22. mysql db тяжелая нагрузка и многочисленные соединения
- 23. NamedParameterJdbcTemplate + TomCat, открытие и закрытие соединения DB
- 24. vagrant postgresql и внешний db gui
- 25. t.belongs_to и влияние на PostGreSQL DB
- 26. Postgresql и devise db migrate failure
- 27. Настройка соединения Postgresql с Play 2 и Slick-Play
- 28. В Puma, как мне рассчитать соединения DB?
- 29. sqlalchemy postgresql enum не создает тип на db migrate
- 30. Flask-SQLAlchemy многие из многих условий соединения
где должно быть вызвано 'get_db'? – Jodooomi
Документы предполагают, что вызов должен быть привязан к текущему контексту, который в этом случае является запросом, поэтому для этого должен применяться атрибут '@ app.before_request' метода. Я обновил образец кода. – user783836
Что такое «g», это как объект сеанса, где я могу хранить переменные? – Jodooomi