英文:
SqlAlchemy Python
问题
I'm trying to update two database records in the same function, but I'm always getting this error here:
sqlalchemy.exc.CompileError: Unconsumed column names: skills, github_url, school_records_url, lattes_url, experience, profile, course_certificates_url, course, registration, summary
I did some searching on the internet and thought I should set all the tables, but it didn't work. I did it this way:
def update(self, user_id: str, data: schemas.UpdateUser):
user = self.db.query(models.User).filter(models.User.id == user_id)
if not user:
return 'User not found'
resume = self.db.query(models.Resume).filter(models.Resume.user_id == user_id)
resume_data = dict({
'summary': data.summary,
'experience': data.experience,
'skills': data.skills,
'course': data.course,
'registration': data.registration,
'school_records_url': data.school_records_url,
'profile': data.profile,
'github_url': data.github_url,
'lattes_url': data.lattes_url,
'course_certificates_url': data.course_certificates_url
})
db_user = user.first()
db_resume = resume.first()
updated_data = data.dict(exclude_unset=False)
user.filter(models.User.id == user_id).update(updated_data, synchronize_session=False)
resume.filter(models.Resume.user_id == user_id).update(
{
"summary": resume_data['summary'],
"experience": resume_data['experience'],
"skills": resume_data['skills'],
"course": resume_data["course"],
'registration': resume_data['registration'],
"school_records_url": resume_data['school_records_url'],
"profile": resume_data['profile'], "github_url": resume_data['github_url'],
"lattes_url": resume_data['lattes_url'],
"course_certificates_url": resume_data['course_certificates_url']}
, synchronize_session=False)
self.db.commit()
self.db.refresh(db_user)
self.db.refresh(db_resume)
return {"status": "success"}
英文:
I'm trying to update two database records in the same function, but I'm always getting this error here:
sqlalchemy.exc.CompileError: Unconsumed column names: skills, github_url, school_records_url, lattes_url, experience, profile, course_certificates_url, course, registration, summary
I did some searching on the internet and thought I should set all the tables, but it didn't work. I did it this way:
def update(self, user_id: str, data: schemas.UpdateUser):
user = self.db.query(models.User).filter(models.User.id == user_id)
if not user:
return 'User not found'
resume = self.db.query(models.Resume).filter(models.Resume.user_id == user_id)
resume_data = dict({
'summary': data.summary,
'experience': data.experience,
'skills': data.skills,
'course': data.course,
'registration': data.registration,
'school_records_url': data.school_records_url,
'profile': data.profile,
'github_url': data.github_url,
'lattes_url': data.lattes_url,
'course_certificates_url': data.course_certificates_url
})
db_user = user.first()
db_resume = resume.first()
updated_data = data.dict(exclude_unset=False)
user.filter(models.User.id == user_id).update(updated_data, synchronize_session=False)
resume.filter(models.Resume.user_id == user_id).update(
{
"summary": resume_data['summary'],
"experience": resume_data['experience'],
"skills": resume_data['skills'],
"course": resume_data["course"],
'registration': resume_data['registration'],
"school_records_url": resume_data['school_records_url'],
"profile": resume_data['profile'], "github_url": resume_data['github_url'],
"lattes_url": resume_data['lattes_url'],
"course_certificates_url": resume_data['course_certificates_url']}
, synchronize_session=False)
self.db.commit()
self.db.refresh(db_user)
self.db.refresh(db_resume)
return {"status": "success"}
答案1
得分: 0
您在.update()
调用中使用了错误的语法。
或者,至少,您在使用它的方式与我习惯的方式不同。
这是我所做的方式:
resume.filter(Resume.user_id == user_id).update({
Resume.summary: resume_data['summary'],
Resume.experience: resume_data['experience'],
...
})
字典键应该是实际的模型字段,例如Resume.summary
,而不是普通字符串,如"summary"
。
英文:
You're using the wrong syntax in the .update()
call.
Or, at least, you're doing it a different way than I'm used to.
This is how I do it:
resume.filter(Resume.user_id == user_id).update({
Resume.summary: resume_data['summary'],
Resume.experience: resume_data['experience'],
...
})
The dictionary keys should be actual model fields, like Resume.summary
, not plain strings like "summary"
.
答案2
得分: 0
以下是翻译好的部分:
def update(self, user_id: str, data: schemas.UpdateUser):
user = self.db.query(models.User).filter(models.User.id == user_id).first()
if not user:
return 'User not found'
resume = self.db.query(models.Resume).filter(models.Resume.user_id == user_id).first()
if not resume:
return 'Resume not found'
user.name = data.name
user.email = data.email
resume.summary = data.summary
resume.experience = data.experience
resume.skills = data.skills
resume.course = data.course
resume.registration = data.registration
resume.school_records_url = data.school_records_url
resume.profile = data.profile
resume.github_url = data.github_url
resume.lattes_url = data.lattes_url
resume.course_certificates_url = data.course_certificates_url
self.db.commit()
return {"status": "success"}
英文:
I managed to solve it this way:
def update(self, user_id: str, data: schemas.UpdateUser):
user = self.db.query(models.User).filter(models.User.id == user_id).first()
if not user:
return 'User not found'
resume = self.db.query(models.Resume).filter(models.Resume.user_id == user_id).first()
if not resume:
return 'Resume not found'
user.name = data.name
user.email = data.email
resume.summary = data.summary
resume.experience = data.experience
resume.skills = data.skills
resume.course = data.course
resume.registration = data.registration
resume.school_records_url = data.school_records_url
resume.profile = data.profile
resume.github_url = data.github_url
resume.lattes_url = data.lattes_url
resume.course_certificates_url = data.course_certificates_url
self.db.commit()
return {"status": "success"}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论