Flask sqlalchemy多对多插入数据 [英] Flask sqlalchemy many-to-many insert data
问题描述
我试图在 Flask-SQLAlchemy 中创建一个多对多的关系,但似乎我不知道如何填充多对多标识符数据库的。你能帮我理解我做错了什么,它应该怎样看?
(db.Model):
__tablename__ ='users'
user_id = db.Column(db.Integer,primary_key = True)
user_fistName = db.Column(db.String(64 ))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128),unique = True)
class Class(db.Model):
__tablename__ ='classes'$ b $ class_id = db.Column(db.Integer,primary_key = True)
class_name = db.Column(db.String (128),unique = True)
然后我的标识符数据库:
student_identifier = db.Table('student_identifier',
pre>
db.Column('class_id',db.Integer,db.ForeignKey('classes。 ('user_id',db.Integer,db.ForeignKey('users.user_id'))
)
so f当我尝试将数据插入数据库时,它看起来像这样。
#User
user1 = User(
user_fistName ='John',
user_lastName = 'Doe',
user_email='john@doe.es')
user2 = User(
user_fistName ='Jack',
user_lastName ='Doe',
user_email='jack@doe.es')
user3 = User(
user_fistName ='Jane',
user_lastName ='Doe',
user_email='jane@doe.es')
db.session.add_all([user1,user2,user3])
db.session.commit()
#Class
cl1 = Class(class_name ='0A')
cl2 = Class(class_name ='0B')
cl3 = Class(class_name ='0C')
cl4 = Class(class_name ='Math')
cl5 = Class(class_name ='Spanish')
db.session.add_all([cl1,cl2,cl3,cl4,cl5])
db .session.commit()
现在我的问题是,如何添加到多对多的数据库,因为我真的不能创建一个student_identifier对象?如果可能的话,也许可能看起来像这样:
$ $ p $ $ $ $ $ class_id,class_name = user1.user_id)
sti2 = StiClass(class_id = cl3.class_id,class_name = user1.user_id)
sti3 = StiClass(class_id = cl4.class_id,class_name = user1.user_id)
sti4 = StiClass(class_id = cl2.class_id,class_name = user2.user_id)
db.session.add_all([sti1,sti2,sti3,sti4])
db.session.commit()
我应该如何使用ORM插入到许多表中?
$ b $你不需要添加任何东西直接到你的关联表,SQLAlchemy会做到这一点。这或多或少来自 SQLAlchemy文档: association_table = db.Table('association',db.Model.metadata,
db.Column('left_id',db.Integer ,db.ForeignKey('left.id')),
db.Column('right_id',db.Integer,db.ForeignKey('right.id'))
)
class Parent(db.Model):
__tablename__ ='left'
id = db.Column(db.Integer,primary_key = True)
children = db.relationship(Child ,
secondary = association_table)
class Child(db.Model):
__tablename__ ='right'
id = db.Column(db.Integer,primary_key = True)
p = Parent()
c = Child()
p.children.append(c)
db.session.add(p )
db.session.commit()
因此,您的示例将如下所示:
student_identifier = db.Table( 'student_identifier',
db.Column('class_id',db.Integer,db.ForeignKey('classes.class_id')),
db.Column('user_id',db.Integer,db。 ForeignKey('students.user_id'))
)
class Student(db.Model):
__tablename__ ='students'
user_id = db.Column(db .Integer,primary_key = True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column (db.String(128),unique = True)
$ b $ class Class(db.Model):
__tablename__ ='classes'$ b $ class_id = db.Column (db.teger,primary_key = True)
class_name = db.Column(db.String(128),unique = True)
children = db.relationship(Student,
secondary = student_identifier)
$ bs = Student()
c = Class()
c.children.append(s)
db.session.add(c)
db.session.commit()
I am trying to make a many to many relation here in Flask-SQLAlchemy, but it seems that I don't know how to fill the "many to many identifier database". Could you please help me understand what I am doing wrong and how it is supposed to look?
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128), unique=True)
class Class(db.Model):
__tablename__ = 'classes'
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
and then my identifier database:
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
db.Column('user_id', db.Integer, db.ForeignKey('users.user_id'))
)
so far it looks like this when I try to insert the data into the database.
# User
user1 = User(
user_fistName='John',
user_lastName='Doe',
user_email='john@doe.es')
user2 = User(
user_fistName='Jack',
user_lastName='Doe',
user_email='jack@doe.es')
user3 = User(
user_fistName='Jane',
user_lastName='Doe',
user_email='jane@doe.es')
db.session.add_all([user1, user2, user3])
db.session.commit()
# Class
cl1 = Class(class_name='0A')
cl2 = Class(class_name='0B')
cl3 = Class(class_name='0C')
cl4 = Class(class_name='Math')
cl5 = Class(class_name='Spanish')
db.session.add_all([cl1, cl2, cl3, cl4, cl5])
db.session.commit()
Now my problem is, how do I add to the many to many database, since I really can't create a 'student_identifier' object? If I could it could perhaps have looked like this:
# Student Identifier
sti1 = StiClass(class_id=cl1.class_id, class_name=user1.user_id)
sti2 = StiClass(class_id=cl3.class_id, class_name=user1.user_id)
sti3 = StiClass(class_id=cl4.class_id, class_name=user1.user_id)
sti4 = StiClass(class_id=cl2.class_id, class_name=user2.user_id)
db.session.add_all([sti1, sti2, sti3, sti4])
db.session.commit()
How I am supposed to insert into a many to many table with ORM?
You don't need to add anything directly to your association table, SQLAlchemy will do that. This is more or less from SQLAlchemy documentations:
association_table = db.Table('association', db.Model.metadata,
db.Column('left_id', db.Integer, db.ForeignKey('left.id')),
db.Column('right_id', db.Integer, db.ForeignKey('right.id'))
)
class Parent(db.Model):
__tablename__ = 'left'
id = db.Column(db.Integer, primary_key=True)
children = db.relationship("Child",
secondary=association_table)
class Child(db.Model):
__tablename__ = 'right'
id = db.Column(db.Integer, primary_key=True)
p = Parent()
c = Child()
p.children.append(c)
db.session.add(p)
db.session.commit()
Therefore your sample would be like this:
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
db.Column('user_id', db.Integer, db.ForeignKey('students.user_id'))
)
class Student(db.Model):
__tablename__ = 'students'
user_id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128), unique=True)
class Class(db.Model):
__tablename__ = 'classes'
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
children = db.relationship("Student",
secondary=student_identifier)
s = Student()
c = Class()
c.children.append(s)
db.session.add(c)
db.session.commit()
这篇关于Flask sqlalchemy多对多插入数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!