使用sqlite3激活外键验证的SQLAlchemy

2024-09-29 19:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sqlite3作为数据库研究烧瓶和SQLAlchemy。但是,外键验证有一个问题,因为它不能正常工作。我知道用“pragma foreign\u keys=ON”激活这个命令是必要的事件。侦听“,但是使用这个im my代码外键仍然不起作用

代码如下:

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 -> Just create an empty database;

sqla -> is SQLAlchemy object from the class where I defined my models;

谢谢。你知道吗


Tags: fromimportappdbdatetimesqlalchemymaincreate

热门问题