Python连接操作MySQL数据库
Python作为一个编程语言,拥有多种发展方向。其中包含了Web开发,当然不管什么发展方向,最后都避免不了要将记录进行存储。那么存储在哪呢?这里我们选择存储在我们的MySQL数据库中。
pip
我们通过前面的两篇文章体验了爬虫、自动化。每篇第一个操作就是使用pip下载相关的库,那么pip到底是什么呢?
pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。
软件包也可以在 pypi.org/ 中找到。目前最新的 Python 版本已经预装了 pip。
查看是否已经安装 pip 可以使用以下命令:
pip --version
下载安装包使用以下命令:
pip install package-name
移除包使用以下命令:
pip uninstall package-name
如果要查看我们已经安装的软件包,可以使用以下命令:
pip list
可以看到安装了不少的库。
那么如果我们需要再另一台机器上,安装同样的库,难道要我们手动一个个install吗?
要导出当前 Python 环境的配置,你可以使用pip freeze
命令。
pip freeze 命令会列出当前环境中已安装的所有 Python 包及其版本信息,你可以将其保存到文件中,例如 pip_environment.txt,如下所示:
导出后进行查看。
接着我们可以使用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)
创建数据库
创建数据库使用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)
可以看见成功创建。
创建数据表
创建数据表使用 "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)
插入数据
我们像这种表中插入一条数据。
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()
批量插入
批量插入使用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()
查询数据
查询数据使用 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)
如果我们只想读取一条数据,可以使用 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)
删除记录
删除记录使用 "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)
可以看到成功删除。
为了防止数据库查询发生 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)
删除表
除表使用 "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操作数据库还是十分简单的。
mysql.connector.connect()
:获取连接对象mydb.cursor()
:获取数据库的操作对象mycursor.execute(sql, parameters)
:来运行sql,第二个参数为元组- 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用
%s
占位符 mycursor.executemany()
:执行多条sql操作mydb.commit()
:提交事务mycursor.fetchall()
:执行为查询SQL后,获取全部的记录mycursor.fetone()
:执行为查询SQL后,获取一条的记录
基本上就涉及到了这些API,相对于Java还是少了非常多的代码,十分方便。
转载自:https://juejin.cn/post/7352075810935095305