0
我正在研究一个项目,显示研究机会并让学生注册参与其中。在注册研究时,服务器检查用户是否已经在同一研究的另一个时间片(不允许)。SQLAlchemy查询不返回与数据库相同的值
的SQLAlchemy的代码如下:
same_study = db.session.query(db.func.count(['*'])) \
.filter(Research.research_id == ResearchSlot.research_id) \
.filter(ResearchSlot.research_slot_id == StudentResearch.research_slot_id) \
.filter(StudentResearch.user_id == Users.user_id) \
.filter(StudentResearch.student_research_id == slot_id) \
.filter(Users.user_email == user_email) \
.scalar()
在此,SLOT_ID和USER_EMAIL是变量。当此查询运行(我输出的查询正在运行),它看起来像这样:
SELECT count(*)
FROM Research, ResearchSlot, StudentResearch, Users
WHERE Research.ResearchID = ResearchSlot.ResearchID
AND ResearchSlot.ResearchSlotID = StudentResearch.ResearchSlotID
AND StudentResearch.UserID = Users.UserID
AND StudentResearch.StudentResearchID = 10
AND Users.UserEmail = "[email protected]"
的问题是,当使用本网站的过程中,执行查询,查询返回0(这意味着他们不在另一个同样的研究实例)应该返回1(因为他们在另一个实例)。当我从MySQL工作台手动执行这个查询时,它会按预期返回1。为什么区别?
CREATE TABLE Users (
UserID BIGINT NOT NULL AUTO_INCREMENT,
UserEmail VARCHAR(100) NOT NULL,
UserPWHash VARCHAR(64) NOT NULL,
UserSalt VARCHAR(64) NOT NULL,
UserRole BIGINT NOT NULL,
UserPsychMajor BOOLEAN NOT NULL,
UserPsychMinor BOOLEAN NOT NULL,
CreatedOn DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (UserID),
FOREIGN KEY (UserRole) REFERENCES Role(RoleID)
);
CREATE TABLE Research (
ResearchID BIGINT NOT NULL AUTO_INCREMENT,
ResearchName VARCHAR(100) NOT NULL,
ResearchFacilitator BIGINT NOT NULL,
ResearchDescription VARCHAR(500) NOT NULL,
ResearchCredits INT NOT NULL,
IsVisible BOOLEAN DEFAULT TRUE NOT NULL,
IsDeleted BOOLEAN DEFAULT FALSE NOT NULL,
CreatedOn DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (ResearchID),
FOREIGN KEY (ResearchFacilitator) REFERENCES Users(UserID)
);
CREATE TABLE ResearchSlot (
ResearchSlotID BIGINT NOT NULL AUTO_INCREMENT,
ResearchID BIGINT NOT NULL,
ResearchSlotOpenings INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
CreatedOn DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (ResearchSlotID),
FOREIGN KEY (ResearchID) REFERENCES Research(ResearchID)
);
CREATE TABLE StudentResearch (
StudentResearchID BIGINT NOT NULL AUTO_INCREMENT,
UserID BIGINT NOT NULL,
ResearchSlotID BIGINT NOT NULL,
IsCompleted BOOLEAN DEFAULT FALSE NOT NULL,
CreatedOn DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (StudentResearchID),
FOREIGN KEY (UserID) REFERENCES Users(UserID),
FOREIGN KEY (ResearchSlotID) REFERENCES ResearchSlot(ResearchSlotID)
);
错误/不同的数据库?你已经给了很少的上下文去... –
这绝对是相同的数据库,什么信息会有帮助吗? –
产生问题的最小自包含示例是理想选择。您可以/应该至少包含精简版模型定义。应该产生你想要的输出的一小段示例数据是必须的。因为它现在是非常难以验证的,除非有人发现明确的编程错误,但是因为如果将查询转换到不太可能的不同环境,查询就可以工作。 –