Python sql_orm 外键关联

import sqlalchemy
from sqlalchemy import create_engine,ForeignKey
from sqlalchemy import Column,Integer,String,Date,Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship

Base= declarative_base()
engine=create_engine("mysql+pymysql://root:xsy667437@localhost/studentdb",encoding="utf-8",echo=False)
class Student_basic(Base):
__tablename__='student_basic'
id=Column(Integer,primary_key=True,autoincrement=True)
name=Column(String(32),nullable=False)
register_date = Column(Date, nullable=False)
gender=Column(Enum("M","F"),nullable=False)
def __repr__(self):
return "<%s name: %s>"%(self.id,self.name)
class Student_study(Base):
__tablename__='student_study'
id=Column(Integer,primary_key=True,autoincrement=True)
day=Column(Integer,nullable=False)
status=Column(String(32),nullable=False)
study_id=Column(Integer,ForeignKey("student_basic.id"))
student=relationship("Student_basic",backref="my_classes")
def __repr__(self):
return "<%s day: %s status :%s>"%(self.student.name,self.day,self.status)
Base.metadata.create_all(engine)
Session_class=sessionmaker(bind=engine)
session=Session_class()
# s1=Student_basic(name="N1",register_date="2016-09-01",gender="M")
# s2=Student_basic(name="N2",register_date="2017-09-01",gender="M")
# s3=Student_basic(name="N3",register_date="2018-09-01",gender="M")
# stu1=Student_study(day=3,status="yes",study_id=1)
# stu2=Student_study(day=3,status="yes",study_id=2)
# stu3=Student_study(day=3,status="no",study_id=3)
# session.add_all([stu1,stu2,stu3])
stu_obj=session.query(Student_basic).filter(Student_basic.name=="N1").first()
print(stu_obj.my_classes)
session.commit()

转载于:https://www.cnblogs.com/xiesongyou/p/7812982.html

SQLAlchemy 中外键关联不上的问题通常是由于以下几个原因: 1. **数据完整性错误**:确保在主表中引用的记录存在。如果试图将一个不存在的ID插入到外键列中,SQLAlchemy 将无法创建关联。 2. **设置不当**:确认你在定义关联时使用了正确的外键和主键。比如,在定义两个类(如 User 和 Post)之间的关系时,`User.id` 应该是 `Post.user_id` 的外键。 ```python from sqlalchemy import Column, Integer, ForeignKey class User(db.Model): id = Column(Integer, primary_key=True) # ... class Post(db.Model): user_id = Column(Integer, ForeignKey('user.id'), nullable=False) content = Column(String) ``` 3. **迁移文件未同步**:如果你在数据库模型发生变化后没有运行 Alembic( SQLAlchemy ORM 的迁移工具)来更新数据库结构,可能会导致外键约束失败。 4. **配置问题**:确保在 Flask-SQLAlchemy 或 SQLAlchemy 的配置中正确设置了连接和映射。 ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() ``` 5. **异常处理**:检查数据库操作时是否捕获了 `IntegrityError` 或 `OperationalError`,这可能是因为尝试插入违反了外键约束。 如果你遇到问题,建议按照以下步骤排查: - 检查数据库日志,看看是否有具体的错误信息。 - 使用 SQL 命令手动检查外键约束是否生效。 - 更新数据库迁移,如果有必要的话。 - 如果是在 Flask 或 Django 等框架中,确保你的代码中没有忽视错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值