修复使用 Python 和 sql 时的完整性错误?

Posted

技术标签:

【中文标题】修复使用 Python 和 sql 时的完整性错误?【英文标题】:Fix the integrity error while using Python with sql? 【发布时间】:2019-10-26 22:39:38 【问题描述】:

Integrity Error Screenshot

我正在尝试在 Employee_id 上加入 Employee 和 Employee Task 两个表,但出现完整性错误。我能够在 Department_id 上加入 Employee 和 Department。

员工:

Employee_fname, Employee_lname, Employee_title, 部门 ID, Employee_id

员工任务:

Project_id_no, Employee_id, Employee_task_in_project

部门:

部门 ID, 部门名称, 部门位置, Department_phone_ext

我正在使用以下语句加入。有什么问题?

sql = f"SELECT Employee_id, Employee_fname, Employee_lname, Employee_title,Employee_task_in_project FROM Employee FULL JOIN EmployeeTask ON Employee.Employee_id = EmployeeTask.Employee_id WHERE Employee.Employee_id = \'str(employeeno)\'"

【问题讨论】:

【参考方案1】:

这是您的查询:

SELECT Employee_id, Employee_fname, Employee_lname, Employee_title,Employee_task_in_project
FROM Employee FULL JOIN
     EmployeeTask
     ON Employee.Employee_id = EmployeeTask.Employee_id
WHERE Employee.Employee_id = ?

至少有一个问题是Employee_id 在两个表中,但SELECT 中的引用没有指定哪一个。这会产生不明确的引用错误。

我建议将查询编写为:

SELECT e.Employee_id, e.Employee_fname, e.Employee_lname, 
       e.Employee_title, et.Employee_task_in_project
FROM Employee e LEFT JOIN
     EmployeeTask et
     ON e.Employee_id = et.Employee_id
WHERE e.Employee_id = ?;

注意事项:

质量所有列引用,因此您、其他人和编译器都清楚它们来自哪个表。 表别名使查询更易于编写和阅读。 FULL JOIN 几乎没有必要。在这种情况下,LEFT JOIN 似乎是正确的 - 它保留了所有员工,即使是那些没有任务的员工。 学习使用参数而不是修改查询字符串。

【讨论】:

以上是关于修复使用 Python 和 sql 时的完整性错误?的主要内容,如果未能解决你的问题,请参考以下文章

ipad - 位置:修复了放大时的错误

修复SQL2000数据库置疑时出现的错误

自动提交设置为 false 时的完整性约束

python Image2gif移植到Python 3并修复了一些错误(但并不是完整的。)

数据完整性问题查询修复逻辑oracle sql

如何修复使用 pymssql 插入 sql DB 的错误