mysql 中的多个 table 到 python 中的一个 table
Multiple tables from mysql to one table in python
在 Python 中,使用 MYSQL 如何从多个 table 中生成 table。我找到了 2 tables 的解决方案,但我不知道如何解决超过 2 tables 的问题。这是架构:
emp (eno CHAR(5), ename VARCHAR(30), bdate DATE, title CHAR(2), salary DECIMAL(9,2), supereno CHAR(5), dno CHAR(5), PRIMARY KEY (eno))
dept (dno CHAR(5), dname VARCHAR(40), mgreno CHAR(5), PRIMARY KEY (dno))
proj (pno CHAR(5), pname VARCHAR(40), budget DECIMAL(9,2), dno CHAR(5), PRIMARY KEY (pno))
workson (eno CHAR(5), pno CHAR(5), resp VARCHAR(20), hours SMALLINT, PRIMARY KEY (eno,pno))
这是我目前尝试过的方法:
import mysql.connector
connection = mysql.connector.connect(user='', password='', host='', database='')
cursor = connection.cursor()
query = ("SELECT ename, w.eno, sum(hours), p.pno, pname, budget, d.dno, dname, mgreno FROM emp e, workson w, proj p, dept d WHERE e.eno=w.eno AND w.pno=p.pno AND p.dno=d.dno "+" budget > %s")
cursor.execute(query, (140000))
for (ename, eno, sum(hours), pno, pname, budget, dno, dname, mgreno) in cursor:
print(pno, pname, dno, dname, sum(hours), mgreno)
cursor.close()
我做错了什么?
你有两个地方,即 WHERE Where
.
使用AND
来分隔条件的不同子句,而不是,
。所以你的SQL结尾应该是:
WHERE e.eno = w.eno AND w.pno = p.pno AND p.dno = d.dno AND budget > %s
sum(hours)
是一个函数调用,不是有效的变量名,所以它不能作为 for 循环中的目标,即 for (ename, eno, sum(hours), ...
。随便起一个变量名,比如sum_hours
.
(140000)
只是 140000
,不是元组。如果你想要一个只有一个元素的元组,你需要一个逗号,即 (140000,)
。您也可以只使用一个列表:[140000]
.
在 Python 中,使用 MYSQL 如何从多个 table 中生成 table。我找到了 2 tables 的解决方案,但我不知道如何解决超过 2 tables 的问题。这是架构:
emp (eno CHAR(5), ename VARCHAR(30), bdate DATE, title CHAR(2), salary DECIMAL(9,2), supereno CHAR(5), dno CHAR(5), PRIMARY KEY (eno))
dept (dno CHAR(5), dname VARCHAR(40), mgreno CHAR(5), PRIMARY KEY (dno))
proj (pno CHAR(5), pname VARCHAR(40), budget DECIMAL(9,2), dno CHAR(5), PRIMARY KEY (pno))
workson (eno CHAR(5), pno CHAR(5), resp VARCHAR(20), hours SMALLINT, PRIMARY KEY (eno,pno))
这是我目前尝试过的方法:
import mysql.connector
connection = mysql.connector.connect(user='', password='', host='', database='')
cursor = connection.cursor()
query = ("SELECT ename, w.eno, sum(hours), p.pno, pname, budget, d.dno, dname, mgreno FROM emp e, workson w, proj p, dept d WHERE e.eno=w.eno AND w.pno=p.pno AND p.dno=d.dno "+" budget > %s")
cursor.execute(query, (140000))
for (ename, eno, sum(hours), pno, pname, budget, dno, dname, mgreno) in cursor:
print(pno, pname, dno, dname, sum(hours), mgreno)
cursor.close()
我做错了什么?
你有两个地方,即
WHERE Where
.使用
AND
来分隔条件的不同子句,而不是,
。所以你的SQL结尾应该是:
WHERE e.eno = w.eno AND w.pno = p.pno AND p.dno = d.dno AND budget > %s
sum(hours)
是一个函数调用,不是有效的变量名,所以它不能作为 for 循环中的目标,即for (ename, eno, sum(hours), ...
。随便起一个变量名,比如sum_hours
.(140000)
只是140000
,不是元组。如果你想要一个只有一个元素的元组,你需要一个逗号,即(140000,)
。您也可以只使用一个列表:[140000]
.