Может кто-нибудь помочь мне с реализацией создания RESTful API с PostgreSQL и Flask без использования SQLAlchemy.
Исходя из опыта NodeJS & MongoDB, я использовал модели с помощью Mongoose для запроса и добавления данных в БД, просто импортируя модели в любое место и используя их.
Но я не нашел способа обойти это с помощью Flask и PostgreSQL без столкновения с SQLAlchemy.
У меня есть структура проекта, как показано ниже:
- api/
---| models/ # will contain the models(tables declaration)
------| __init__.py
------| User.py
------| Projects.py
---| resources/ # contains the logic files
------| __init__.py
------| users.py
------| projects.py
---|db.py
---|server.py
В моем /db.py
файле у меня есть следующий код
import psycopg2
from flask import g
def connect_db:
con = psycopg2.connect(
dbname='RSG_SQL'
)
con.autocommit = True
cur = con.cursor()
cur.execute("SELECT version();")
record = cur.fetchone()
print(con.get_dsn_parameters(), "\n")
print("connected to db - ", record, "\n")
except (Exception, psycopg2.Error) as error:
print('error while connecting to PostgreSQL', error)
finally:
# close db connection
if (con):
cur.close()
con.close()
print('connection to db closed')
return con
def close_db:
db = g.pop('db', None)
if db is not None:
db.close()
И в моем /server.py
файле у меня есть
from flask import Flask, request, jsonify, current_app, g
from flask_restful import Resource, Api
from db import connect_db
from resources.users import AllUsers, SingleUser
# connect to db
con = connect_db()
if 'db' not in g:
g.db = con
# create flask app
app = Flask(__name__)
# use flask_restful resource routing
api = Api(app)
# setup the Api resource routing here
api.add_resource(AllUsers, '/users')
api.add_resource(SingleUser, '/users/<user_id>')
if __name__ == '__main__':
# set application to debug mode
app.config['DEBUG'] = True #TODO: remove this line before production
app.run()
Цель состоит в том, чтобы выполнить это без использования SQLalchemy и подключения к базе данных только один раз, а не каждый раз, когда делается запрос, потому что создание подключения к базе данных является дорогостоящим и замедлит время ответа.
Спасибо.