本文介绍如何使用Python操作MySQL数据库,主要包含以下几点:

  • 连接mysql
  • 创建数据库
  • 创建表
  • 往表中插入数据
  • 查询数据

1、安装对应Python包

​pip install mysql-connector-python​

2、连接mysql

from mysql import connector
from mysql.connector import errorcode

try:
client = connector.connect(user='xxxx', password='xxxxxx', host='xxxxxx', database='xxxx')
cursor = client.cursor()
except connector.Error as err:
client = None
cursor = None
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)

3、创建数据库

with open("../../../../Database/MySQL/create_databases.sql", "r") as f:
sql = f.read()
try:
cursor.execute(sql)
print("Create databases successfully")
except connector.Error as err:
print(err)
exit(1)

其中create_databases.sql中内容见
​​​https://github.com/xiligey/Notes/blob/master/Database/MySQL/create_databases.sql​

4、创建表

with open("../../../../Database/MySQL/create_tables.sql", "r") as f:
sql = f.read()
try:
cursor.execute(sql)
print("Create tables successfully")
except connector.Error as err:
print(err)
exit(1)

其中create_tables.sql内容如下见
​​​https://github.com/xiligey/Notes/blob/master/Database/MySQL/create_tables.sql​

5、插入数据

from datetime import date, datetime, timedelta

tomorrow = datetime.now().date() + timedelta(days=1)
add_employee = ("INSERT INTO employees "
"(first_name, last_name, hire_date, gender, birth_date) "
"VALUES (%s, %s, %s, %s, %s)")
data_employee = ('Geert', 'Jack', tomorrow, 'M', date(1977, 6, 14))
cursor.execute(add_employee, data_employee)

add_salary = ("INSERT INTO salaries "
"(emp_no, salary, from_date, to_date) "
"VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")

emp_no = cursor.lastrowid
data_salary = {
'emp_no': emp_no,
'salary': 50000,
'from_date': tomorrow,
'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)
client.commit()

6、查询数据

query = ("SELECT first_name, last_name, hire_date FROM employees "
"WHERE hire_date BETWEEN %s AND %s")

hire_start = date(1999, 1, 1)
hire_end = date(2999, 12, 31)

cursor.execute(query, (hire_start, hire_end))

for (first_name, last_name, hire_date) in cursor:
print("{}, {} was hired on {:%d %b %Y}".format(
last_name, first_name, hire_date))

7、关闭连接

最后记得关闭客户端连接

if cursor:
cursor.close()
if client:
client.close()

8、源码

见​​https://github.com/xiligey/Notes/blob/master/Python/basic/io/database/mysql_operate.py​