likes
comments
collection
share

Python连接操作MySQL数据库

作者站长头像
站长
· 阅读数 4

Python作为一个编程语言,拥有多种发展方向。其中包含了Web开发,当然不管什么发展方向,最后都避免不了要将记录进行存储。那么存储在哪呢?这里我们选择存储在我们的MySQL数据库中。

pip

我们通过前面的两篇文章体验了爬虫、自动化。每篇第一个操作就是使用pip下载相关的库,那么pip到底是什么呢?

pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。

软件包也可以在 pypi.org/ 中找到。目前最新的 Python 版本已经预装了 pip。

Python连接操作MySQL数据库

查看是否已经安装 pip 可以使用以下命令:

  • pip --version

Python连接操作MySQL数据库

下载安装包使用以下命令:

  • pip install package-name

移除包使用以下命令:

  • pip uninstall package-name

如果要查看我们已经安装的软件包,可以使用以下命令:

  • pip list

Python连接操作MySQL数据库

可以看到安装了不少的库。

那么如果我们需要再另一台机器上,安装同样的库,难道要我们手动一个个install吗?

要导出当前 Python 环境的配置,你可以使用pip freeze命令。 pip freeze 命令会列出当前环境中已安装的所有 Python 包及其版本信息,你可以将其保存到文件中,例如 pip_environment.txt,如下所示:

Python连接操作MySQL数据库

导出后进行查看。 Python连接操作MySQL数据库

接着我们可以使用pip install -r pip_environment.txt来一键安装。

言归正传,我们要操作MySQL首先要安装相关的库。pip install mysql-connector

创建数据库连接


import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin"  # 数据库密码
    # database="" 
)
print(mydb)

Python连接操作MySQL数据库

创建数据库

创建数据库使用CREATE DATABASE语句,我们来创建一个名为python-connect的数据库,同时也可以使用SHOW DATABASES语句来查看数据库是否存在:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin"  # 数据库密码
)

print(mydb)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE python_connect")
mycursor.execute("SHOW DATABASES")
for database in mycursor:
    print(database)

Python连接操作MySQL数据库

可以看见成功创建。

创建数据表

创建数据表使用  "CREATE TABLE"  语句,创建数据表前,需要确保数据库已存在,我们在我们创建的python_connect中进行创建一张User表,并且通过SHOW TABLES来查看:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE user (Id VARCHAR(255), name VARCHAR(255))")
mycursor.execute("SHOW TABLES")
for x in mycursor:
    print(x)

Python连接操作MySQL数据库

插入数据

我们像这种表中插入一条数据。

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()
sql = "INSERT INTO user (Id, name) VALUES (%s, %s)"
val = ("1", "zs")
mycursor.execute(sql, val)
# 数据表内容有更新,必须使用到该语句
mydb.commit()

Python连接操作MySQL数据库

批量插入

批量插入使用executemany()方法,该方法的第二个参数是一个元组列表,包含了我们要插入的数据:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()
sql = "INSERT INTO user (Id, name) VALUES (%s, %s)"
val = [
    ('2', 'ls'),
    ('3', 'ww'),
    ('4', 'zy')
]
# 批量插入
mycursor.executemany(sql, val)
# 数据表内容有更新,必须使用到该语句
mydb.commit()

Python连接操作MySQL数据库

查询数据

查询数据使用 SELECT 语句:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchall()  # fetchall() 获取所有记录

for x in myresult:
    print(x)

Python连接操作MySQL数据库

如果我们只想读取一条数据,可以使用 fetchone()  方法:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchone()  # fetchone() 获取一条记录

print(myresult)

Python连接操作MySQL数据库

删除记录

删除记录使用  "DELETE FROM"  语句:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchall()  # fetchall() 获取所有记录

for x in myresult:
    print(x)

mycursor.execute("DELETE FROM user where id = '1' ")
# 数据表内容有更新,必须使用到该语句 
mydb.commit()


mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchall()  # fetchall() 获取所有记录

for x in myresult:
    print(x)

Python连接操作MySQL数据库

可以看到成功删除。

为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义删除语句的条件:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchall()  # fetchall() 获取所有记录

for x in myresult:
    print(x)
# 第二个参数必须为元组
mycursor.execute("DELETE FROM user where id = %s", ('2',))
mydb.commit()

mycursor.execute("SELECT * FROM user")

myresult = mycursor.fetchall()  # fetchall() 获取所有记录

for x in myresult:
    print(x)

更新表数据

数据表更新使用  "UPDATE"  语句

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
mycursor = mydb.cursor()

mycursor.execute("UPDATE user SET name = %s WHERE Id = %s", ('king', '4'))
mydb.commit()


# 第二个参数必须为元组
mycursor.execute("SELECT * FROM user where id = %s ", ('4',))
myresult = mycursor.fetchone()

print(myresult)

Python连接操作MySQL数据库

删除表

除表使用  "DROP TABLE"  语句, IF EXISTS 关键字是用于判断表是否存在,只有在存在的情况才删除:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 数据库主机地址
    user="root",  # 数据库用户名
    passwd="kylin",  # 数据库密码
    database="python_connect"
)

print(mydb)
sql = "DROP TABLE IF EXISTS user"  # 删除数据表 user

mycursor.execute(sql)

总结

使用python操作数据库还是十分简单的。

  1. mysql.connector.connect():获取连接对象
  2. mydb.cursor():获取数据库的操作对象
  3. mycursor.execute(sql, parameters):来运行sql,第二个参数为元组
  4. 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符
  5. mycursor.executemany():执行多条sql操作
  6. mydb.commit():提交事务
  7. mycursor.fetchall():执行为查询SQL后,获取全部的记录
  8. mycursor.fetone():执行为查询SQL后,获取一条的记录

基本上就涉及到了这些API,相对于Java还是少了非常多的代码,十分方便。

Python连接操作MySQL数据库