【发布时间】:2018-06-05 13:27:17
【问题描述】:
我正在尝试使用 pyodbc 和 SQL Server 与 sqlalchemy 建立多对多关系,这是我的代码:
from sqlalchemy import Table, Text
from sqlalchemy import ForeignKey
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
courses_students = Table('courses_students',Base.metadata,
Column('stu_id',ForeignKey('student.id'),primary_key=True),
Column('cour_id',ForeignKey('course.id'),primary_key=True),
Column('grade',Integer())
)
# from sqlalchemy.ext.declarative import declarative_base
# Base = declarative_base()
class Student(Base):
__tablename__ = 'student'
stu_id = Column('id',Integer,primary_key=True)
name = Column('name',String(10))
stu_class = Column('class',String(10))
#courses = relationship('Course',secondary=courses_students,back_populates='students')
def __init__(self,stu_id,name,stu_class):
self.stu_id = stu_id
self.name = name
self.stu_class = stu_class
def __repr__(self):
_str = "Student({_id},{_name},{_class})".format(_id=self.stu_id,_name=self.name,
_class=self.stu_class)
return _str
# from sqlalchemy.ext.declarative import declarative_base
# Base = declarative_base()
class Course(Base):
__tablename__ = 'course'
cour_id = Column('id',Integer,primary_key=True)
name = Column('name',String(20))
teacher_name = Column('teacher_name',String(10))
credit = Column('credit',Integer())
students = relationship('Student',secondary=courses_students,backref='courses')
def __init__(self,c_id,name,t_name,credit):
self.cour_id = c_id
self.name = name
self.teacher_name = t_name
self.credit = credit
def __repr__(self):
_str = "Course({_id},{_na},{_t_na},{_cre})".format(_id=self.cour_id,_na=self.name,
_t_na=self.teacher_name,
_cre=self.credit)
return _str
但是,当我尝试使用session.add() 添加数据时,我遇到了以下错误:
InvalidRequestError:一个或多个映射器未能初始化 - 无法继续初始化其他映射器。触发映射器:'映射器|学生|学生'。最初的例外是:初始化映射器 Mapper|Student|student 时,表达式“课程”未能找到名称(“未定义名称“课程”)。如果这是一个类名,请考虑在定义了两个依赖类之后将此 relationship() 添加到该类中。
【问题讨论】:
标签: python sqlalchemy