我正在嘗試將項目插入到我的數據庫中。我在Flask中使用SQLlite和SQLAlchemy,但似乎存在問題。每當我嘗試從cmd手動插入項目時,都會收到錯誤消息。與Flask的一對多SQLAlchemy數據庫中的錯誤
This session's transaction has been rolled back due to a previous exception during flush.
我已經在我的數據庫中實現了一對多的關係,但似乎一直在搞亂。這裏是我的Python代碼:
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
main = Flask(__name__)
db = SQLAlchemy(main)
main.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://YYYYYYY:[email protected]/address'
main.config['SECRET_KEY'] = 'something-secret'
Bootstrap(main)
class Organisation(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), unique=True)
email = db.Column(db.String(40), unique=True)
number = db.Column(db.String(40), unique=True)
employees = db.relationship('Person', backref='employer', lazy='dynamic')
def __init__(self, title, email, number):
self.title = title
self.email = email
self.number = number
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=False)
email = db.Column(db.String(40), unique=True)
mobile = db.Column(db.String(40), unique=True)
employer_id = db.Column(db.Integer, db.ForeignKey('organisation.id'))
def __init__(self, name, email, mobile, employer_id):
self.name = name
self.email = email
self.mobile = mobile
self.employer_id = employer_id
@main.route('/', methods=['GET'])
def index():
result = Person.query.all()
org_result = Organisation.query.all()
return render_template("index.html", result=result, org_result=org_result)
@main.route('/additems', methods=['GET'])
def additems():
return render_template('add.html')
@main.route('/add', methods=['GET', 'POST'])
def add():
person = Person(request.form['name'], request.form['email'], request.form['mobile'])
db.session.add(person)
db.session.commit()
if __name__ == "__main__":
main.run(debug=True)
如果我必須說實話,我認爲我的問題是某處初始化功能。我試圖改變他們在幾個方面:
1.Adding員工self.employees =員工和直接嘗試輸入一個組織爲: organisation_one=Organisation(title="XX",email="[email protected]",number="3838",employees=person_one)
但還以顏色錯誤,即使之前,我可以提交person_one
2.我試過在Person __init__文件中引用employer_id,當我嘗試添加組織標識時,我收到錯誤「無法修改類型」。
我在做什麼錯了一對多的數據庫模型?有人可以幫我嗎?
是這些現有的表在Postgre數據庫?你有沒有試過爲你的數據庫模型指定'__tablename__'? – abigperson
他們是現有的表格,我不太清楚如何爲模型指定'__tablename__'。 – ZombieChowder
只是添加了一些解釋作爲答案。很確定這會讓你整理出來。 – abigperson