报错TypeError:Connection.execute()获意外参数'full_name',数据库插入求助
问题排查与解决办法
错误原因分析
1. 参数传递方式不符合SQLAlchemy要求
Connection.execute()执行text()构造的查询时,不能直接传入多个独立的关键字参数(比如full_name=xxx这种写法),它要求将参数打包成字典传递,或者用**语法解包字典。
2. INSERT语句的字段与值顺序完全错位
你的SQL语句中,VALUES子句的参数顺序和前面声明的字段顺序不匹配:
- 字段顺序:
full_name, email, education, work_experience, resume_url - 值的顺序:
:full_name, :email, :resume_url, :education, :work_experience
这会导致resume_url的值被错误存入education字段,education的值存入work_experience字段,数据完全混乱。
3. 遗漏必填字段job_id
数据库表中job_id是NOT NULL约束的必填字段,但你的INSERT语句未包含该字段,即使参数问题解决,后续也会触发数据库约束错误。
修正后的代码
def add_application_to_db(job_id, data): with engine.connect() as conn: # 修正字段顺序,添加必填的job_id字段 query = text("INSERT INTO applications (job_id, full_name, email, education, work_experience, resume_url) VALUES (:job_id, :full_name, :email, :education, :work_experience, :resume_url)") # 将参数打包成字典传递 params = { "job_id": job_id, "full_name": data['full_name'], "email": data['email'], "education": data['education'], "work_experience": data['work_experience'], "resume_url": data['resume_url'] } conn.execute(query, params) # SQLAlchemy核心API默认不自动提交事务,需手动提交 conn.commit()
简化写法(可选)
如果data字典里已经包含所有需要的参数(包括job_id),可以直接用解包语法简化:
def add_application_to_db(job_id, data): with engine.connect() as conn: data['job_id'] = job_id query = text("INSERT INTO applications (job_id, full_name, email, education, work_experience, resume_url) VALUES (:job_id, :full_name, :email, :education, :work_experience, :resume_url)") conn.execute(query, **data) conn.commit()
内容的提问来源于stack exchange,提问作者Abdullah Bin Aftab
相关产品推荐
相关产品推荐

