Я изучаю флягу и 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 из класса, в котором я определил свои модели;
Спасибо.