Использование PostgreSQL с Flask, но без SQLAlchemy - PullRequest
0 голосов
/ 05 июля 2019

Может кто-нибудь помочь мне с реализацией создания 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 и подключения к базе данных только один раз, а не каждый раз, когда делается запрос, потому что создание подключения к базе данных является дорогостоящим и замедлит время ответа.

Спасибо.

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