【发布时间】:2023-03-21 07:20:01
【问题描述】:
我在 shell 中使用这个 mysql 语句创建了一个表 users:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(40) NOT NULL,
`email` varchar(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;
还有一张表posts,上面有这个语句:
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(140) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_user_id` (`user_id`),
CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
我想在我的 Flask 应用程序中使用这些表。我创建了一个将posts 连接到users 的外键。它应该是与拥有许多帖子的用户的一对多关系。
在我的 python 代码中,我有以下模型:
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(40), unique=True)
email = db.Column(db.String(120), unique=True)
posts = db.relationship('Posts', backref='user', lazy='dynamic')
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User {}>'.format(self.username)
class Posts(db.Model):
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String(140))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
但是,当我尝试运行我的 Flask 应用程序时,我不断收到错误消息:
sqlalchemy.exc.InvalidRequestError:一个或多个映射器未能 初始化 - 无法继续初始化其他映射器。 最初的例外是:无法确定之间的连接条件 关系 Users.posts 上的父/子表 - 没有外国 链接这些表的键。
但是我在mysql语句中创建了连接posts到users的外键。当我取出posts = db.relationship('Posts', backref='user', lazy='dynamic') 行时,一切正常,所以问题在于那段代码。我的设置的哪一部分有问题?
【问题讨论】:
标签: python mysql flask sqlalchemy flask-sqlalchemy