Flask SQLAlchemy с использованием sqlite3 активирует проверку внешнего ключа - PullRequest
0 голосов
/ 03 октября 2019

Я изучаю флягу и SQLAlchemy, используя sqlite3 в качестве базы данных. Однако у меня проблема с проверкой внешнего ключа, потому что он не работает должным образом. Я знаю, что необходимо активировать это с помощью "pragma foreign_keys = ON" и необходимо использовать "event.listen", но при этом, используя мой код, внешний ключ все еще не работает

Вот код:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy, event
from sqlalchemy import create_engine
from Controller.BD.sqlLite3_creat import main, getConnect
from Controller.BD import sqlLite3_creat
from Model.ModelChamado import *
from datetime import date, datetime

app = Flask(__name__)

#Parametrização da conexao com o banco de dados
app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///../Controller/BD/RegistroChamado.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

#variavel global de data atual
diaAtual = date.today()
diaAtual = diaAtual.strftime("%d/%m/%Y")

#converter o objeto em datetime
diaAtual = datetime.strptime(diaAtual, '%d/%m/%Y')

database_url = r'..\Controller\BD\RegistroChamado.db'


#Ativar validação FK para o sqlite3
engine = create_engine(r'sqlite:///../Controller/BD/RegistroChamado.db')

def _fk_pragma_on_connect(con = getConnect(database_url)):
    con.execute('pragma foreign_keys=ON')

event.listen(engine, 'connect', _fk_pragma_on_connect)



def main():
    #realiza a criação do banco de dados
    sqlLite3_creat.main(database_url)

    #Realiza a criação das tabelas
    sqla.create_all()


#Inicio
@app.route("/")
def index():
    main()
    return render_template("index.html")

#Registrod e novos chamados
@app.route("/registrarchamado")
def paginaDeRegistroChamados():
    tpChamados = TipoChamado.query.all()
    sistemas = Sistema.query.all()
    origemReclamacao = OrigemReclamacao.query.all()

    return render_template("registrarChamado.html", tpchamados = tpChamados, sistemas = sistemas, origemReclamacao = origemReclamacao )

sqlLite3_creat.main -> Просто создайте пустую базу данных;

sqla -> - это объект SQLAlchemy из класса, в котором я определил свои модели;

Спасибо.

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