我正在使用mysql(8.0.19)数据库编码一个新的python(版本3.8.2)项目。
这是表创建代码:
import mysql.connector
mydb = mysql.connector.connect(
host = "localhost",
user = "root",
password = "mypassword",
database = "acme_db"
)
mycursor = mydb.cursor()
sql_formula = ("CREATE TABLE employee (employee_id INT AUTO_INCREMENT PRIMARY KEY,"
"first_name VARCHAR(255),"
"last_name VARCHAR(255),"
"email VARCHAR(255),"
"phone_nr VARCHAR(255),"
"hire_date DATE,"
"job_id INTEGER,"
"salary NUMERIC(8,2),"
"commission_pct NUMERIC(8,2),"
"manager_id INTEGER,"
"department_id INTEGER)")
mycursor.execute(sql_formula)
mycursor.execute("CREATE TABLE jobs (job_id INT, job VARCHAR(255))")
mycursor.execute("CREATE TABLE managers (manager_id INT, employee_id INTEGER)")
mycursor.execute("CREATE TABLE departments (department_id INT, department_name VARCHAR(255))")
问题是,关于id的最佳做法是什么?
我的意思是,employee_id是唯一的自动增量pk,据我了解,其他ID呢?用于餐桌工作,经理和部门。
它们不应该与employee_id的定义相同,还是仅仅是INT,我需要照顾这个数字,它不会重复出现,等等吗?
我确实使所有id都具有相同的定义,但是我不能将数据插入表中:
dptFormula = "INSERT INTO depatments (department_name) VALUES (%s)"
acme_departments = [("Accounting"),("R&D"),("Support")]
mycursor.executemany(dptFormula, acme_departments)
我知道了:
Traceback (most recent call last):
File "c:/Users/Daniel/EmployeeProject/employee_mgt/insert_into.py", line 20, in <module>
mycursor.executemany(dptFormula, acme_departments)
File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 668, in executemany
stmt = self._batch_insert(operation, seq_params)
File "C:\Program Files\Python38\lib\site-packages\mysql\connector\cursor.py", line 613, in _batch_insert
raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement
答案 0 :(得分:1)
您已经在使用一种最佳实践。每个表都有一个用于主键的自动递增整数,并且您在表(<Grid container>
<Grid item xs={2}>...</Grid>
<Grid item xs={10}>...</Grid>
</Grid>
,'job_id employee_id
id`)之后命名了这些键
每个表都有其自己的自动递增ID值序列。如果您尝试使用, not just
在employees
表中查找内容,那么您将毫无用处。但是你可以做这样的事情
job_id
利用员工与工作之间的关系。 SELECT e.first_name, e.last_name, j.job
FROM employee e
JOIN job h ON e.job_id = j.job_id
所表示的表行之间的关系是术语关系数据库管理系统”的原因。
@Akina在评论中指出,应为主键列使用这种定义。
JOIN job h ON e.job_id = j.job_id
这是个好建议。