【发布时间】:2020-09-20 20:53:19
【问题描述】:
我对 Flask 和 SQLAlchemy 非常陌生,但对 Python 有基本的了解。这也是我在这里的第一篇文章,我想我已经广泛寻找我的问题的答案。
我正在尝试创建一个非常简单的家谱数据库。我有两个表 - 一个个人表和一个家庭表(每个家庭都有一个可选的父亲和一个可选的母亲 - 每一个都是代表个人表中另一个人的外键)。
创建个人时必须使用姓氏和可选的前名和中间名。在个人表中还有一个与族表有关系的列。
当我尝试运行此代码时,我得到一个错误 -
sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) 绑定参数 3 错误 - 可能是不受支持的类型。
[SQL: INSERT INTO individual (forename, middle_name, surname, family_id) VALUES (?, ?, ?, ?)]
[参数:('David', None, 'Bloggs',
代码是:
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///"+os.path.join(basedir,"data.sqlite")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
Migrate(app, db)
class Family(db.Model):
__tablename__ = "family"
id = db.Column(db.Integer,primary_key=True)
mother_id = db.Column(db.Integer,db.ForeignKey("individual.id"))
father_id = db.Column(db.Integer,db.ForeignKey("individual.id"))
def __init__(self,mother_id='',father_id=''):
self.mother_id = mother_id
self.father_id = father_id
class Individual(db.Model):
__tablename__ = "individual"
id = db.Column(db.Integer, primary_key=True)
forename = db.Column(db.Text)
middle_name = db.Column(db.Text)
surname = db.Column(db.Text)
family_id = db.Column(db.Integer,db.ForeignKey("family.id"))
def __init__(self,surname,forename=None,middle_name=None):
self.forename = forename
self.middle_name = middle_name
self.surname = surname
self.family_id = db.relationship("family",backref="individual",lazy="dynamic")
def __repr__(self):
return f"""The individual is {self.forename} {self.middle_name}
{self.surname}, their father is {self.family.father_id.forename}
{self.family.father_id.middle_name} {self.family.father_id.surname}
and their mother is {self.family.mother_id.forename}
{self.family.mother_id.middle_name} {self.family.mother_id.surname}"""
db.create_all()
person1 = Individual("Bloggs", "David")
person2 = Individual("Bloggs", "Robert")
person3 = Individual("Smith", "Mary", "Ann")
db.session.add_all([person1,person2,person3])
db.session.commit()
print(person1)
print(person2)
print(person3)
任何帮助表示赞赏。谢谢。
【问题讨论】:
标签: python-3.x flask-sqlalchemy