gpt4 book ai didi

python - 一对多 Flask | SQL炼金术

转载 作者:太空狗 更新时间:2023-10-29 20:22:55 25 4
gpt4 key购买 nike

我正在尝试使用 Flask 和 SQLAlchemy 创建一对多关系。

我希望一对多关系是这样的:

“对于任何一部电影,都可以有多个角色”

这就是我目前所拥有的,但它现在正以一对一的形式保存在我的数据库中。 (一部电影对应一个角色,多个角色在DB中保存多次)

class Movie(db.Model):
__tablename__ = "movies"
id = db.Column('movies_id', db.Integer, primary_key=True)
movie_type = db.Column('movie_type', db.Text())

def __init__(self, movie_type):
self.movie_type = movie_type

def __repr__(self):
return '<Movie %r>' % self.id

class Character(db.Model):
__tablename__ = "characters"
id = db.Column('character_id', db.Integer, primary_key=True)
character_description = db.Column('character_description', db.Text())

movie_id = db.Column(db.Integer, db.ForeignKey('movies.movie_id'))
movie = db.relationship('Movie', backref='characters', lazy='dynamic')

def __init__(self, character_description, movie):
self.character_description = character_description

self.movie = movie

def __repr__(self):
return '<Character %r>' % self.id

我像这样保存到数据库中:

movie = models.movie(movie_type)
character = models.Character(character_description, movie)

db.session.add(movie)
db.session.add(character)
db.session.commit()

最终目标是能够查找某个角色在哪部电影中。如果您也能帮我解决这个问题,那就太好了!

提前致谢。

最佳答案

好吧,我想你错过了电影中的人物关系 + 插页并不完全正确。

还有一些小细节需要注意。为什么电影id是movieS_id,角色id是character_id?

此外,如果未指定,列的名称与变量的名称相同。

例如你可以这样做:

character_description = db.Column(db.Text())

无论如何,在不更改此详细信息的情况下,您可以尝试以下操作:

class Movie(db.Model):
__tablename__ = "movies"
id = db.Column('movies_id', db.Integer, primary_key=True)
movie_type = db.Column('movie_type', db.Text())
characters = db.relationship("Character", backref="movie", lazy='dynamic')
def __init__(self, movie_type):
self.movie_type = movie_type

def __repr__(self):
return '<Movie %r>' % self.id

class Character(db.Model):
__tablename__ = "characters"
id = db.Column('character_id', db.Integer, primary_key=True)
character_description = db.Column('character_description', db.Text())

movie_id = db.Column(db.Integer, db.ForeignKey('movies.movies_id'))
movie = db.relationship('Movie')

def __init__(self, character_description, movie):
self.character_description = character_description

self.movie = movie

def __repr__(self):
return '<Character %r>' % self.id

插入

c = Character(character_description='c')
c2 = Character(character_description='c2')
m = Movie(movie_type ='action')

# link characters to movie
m.characters.append(c)
m.characters.append(c2)
# or
m.characters.extend([c,c2])

db.session.add(m)
# add characters
db.session.add(c)
db.session.add(c2)
# or
db.session.add_all([c,c2])
# commit
db.session.commit()

关于python - 一对多 Flask | SQL炼金术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25375179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com