调用数据库函数(SQLAlchemy所写),传入参数查询,二次调用参数为第一次传入参数

问题来源:
封装好远程数据库查询模块
第一次调用,传入参数
第二次调用,传入参数,无效,返回的值仍然时第一次调用的值

问题代码:

createtables文件下代码:

class Design(Base):
    __tablename__='design'
    design_id=Column(Integer,primary_key=True)
    teacher_id = Column(Integer, ForeignKey('teacher.teacher_id'), primary_key=True)
    student_id = Column(Integer, ForeignKey('student.student_id'),primary_key=True)
    name=Column(String(50))

(忘了teacher_id和student_id是主键时错误,还是非主键时错误了)

connect文件下代码:

from sqlalchemy import create_engine, or_
from sqlalchemy.orm import scoped_session, sessionmaker, session
from SQLAlchemy import createtables
import random as r
from SQLAlchemy import choicedemo
#此为远程数据库连接信息
db_connect_string='mysql://账号:密码@ip:3306/数据库名称?charset=utf8'
engine=create_engine(db_connect_string)
SessionType=scoped_session(sessionmaker(bind=engine,expire_on_commit=False))
def GetSession():
    return SessionType()

from contextlib import contextmanager
@contextmanager
def session_scope():
    session=GetSession()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()
class Get():
    def Design(self,design_id=None,teacher_id=None, student_id=None, name=None):
        with session_scope() as session:
            return session.query(createtables.Design).filter(
                or_(createtables.Design.design_id == design_id,createtables.Design.teacher_id == teacher_id, createtables.Design.student_id == student_id
                    , createtables.Design.name == name)).first()

当调用design方法的时候就会出现错误。

问题原因:
不详。

解决办法:
定义数据表的时候,将teacher,student主键去除:

class Design(Base):
    __tablename__='design'
    design_id=Column(Integer,primary_key=True)
    teacher_id = Column(Integer, ForeignKey('teacher.teacher_id'))
    student_id = Column(Integer, ForeignKey('student.student_id'))
    name=Column(String(50))

暂时性解决办法。
如果有懂的,希望评论解惑,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值