当我尝试加入多对多表并通过main-id对其进行分组时,当我添加第二个多对多表时,我得到重复.
以下是我的模型的样子:
用户
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
...
Run Code Online (Sandbox Code Playgroud)
student_identifier
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('class.class_id')),
db.Column('id', db.Integer, db.ForeignKey('user.id'))
)
Run Code Online (Sandbox Code Playgroud)
类
class Class(db.Model):
sqlite_autoincrement=True
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
mm_children = db.relationship('User', secondary=student_identifier, backref=db.backref('classes'))
Run Code Online (Sandbox Code Playgroud)
class_course_identifier
class_course_identifier = db.Table('class_course_identifier',
db.Column('course_id', db.Integer, db.ForeignKey('course.course_id')),
db.Column('class_id', db.Integer, db.ForeignKey('class.class_id'))
)
Run Code Online (Sandbox Code Playgroud)
数据库结构

好吧,我正在使用SQLAlchemy选择我想要的数据所需的表.这个session.query
db.session.query(
Class.class_id,
Class.class_name,
func.group_concat(User.user_fistName),
func.group_concat(Course.course_name)
).filter(Class.courses, User.classes).group_by(Class.class_id)
Run Code Online (Sandbox Code Playgroud)
问题是我得到了课程和名称的重复,所以如果课程有两个用户,它将打印学生和课程两次.这是它的样子:
错误的看法

以下是它的外观:
正确的观点

当我添加第二个多对多表时,问题就出现了,例如users/student-identifier.如果我删除我"加入"它的行,我得到重复.反正有没有纠正这个?或者我应该使用RAW-SQL(如果是,如何使用?)
我正在学习SQLAlchemy而且我被困住了.我有一个SQL表(table1)有两个字段:'name'和'other_names'
我有一个包含两列的excel文件:
first_name alias
paul patrick
john joe
simon simone
john joey
john jo
Run Code Online (Sandbox Code Playgroud)
我想将excel文件读入我的table1,所以它看起来像这样(即同一行的所有别名都在一行):
paul patrick
john joe,joey,jo
simon simone
Run Code Online (Sandbox Code Playgroud)
这是我试图做的想法.我试过的代码(带注释):
for line in open('file.txt', 'r'): #for each line in the excel file
line = line.strip().split('\t') #split each line with a name and alias
first_name = line[0] #first name is the name before the tab
alias = line[1] #alias is the name after the tab
instance =
Session.query(session,tbs['table1'].name).filter_by(name=first_name) #look through the database table, by name field, and see if …Run Code Online (Sandbox Code Playgroud)