前置任务
pip install pymysql
关于数据库的连接关闭,确认事务等
from pymysql import Connection
# 获取到MySQL数据库的链接对象
pm = Connection(
host='localhost', # 主机名(或IP地址)
port=3306, # 端口,默认3306
user='root', # 账户名
password='520999' # 密码
autocommit=True #设置任意操作都可以自动提交而不需要插入一次数据就写个pm.commit()
)
# 打印MySQL数据库软件信息,正常显示则连接成功
print(pm.get_server_info()) # 8.0.27
#如果有需要确认的,且没有写autocommit=True,如插入操作
pm.commit()
# 注意如果不确认插入操作,则仅仅在python中可以读出数据,实则并没有真提交在数据库里,也就是数据库里没有发生插入行为,没有东西,只py可以读
# 一定要关闭数据库的链接(文件操作也是如此)
pm.close()
增删改查语句
游标对象=连接对象.cursor()
游标对象.execute("SQL的增删改查语句")
#如果涉及到数据变动(增删改),且连接对象没有配置自动连接autocommit,则还需要附带
游标对象.commit()
"""pymysql在执行数据插入或其它产生数据更改的SQL语句时默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。"""
from pymysql import Connection
# 获取到MySQL数据库的链接对象
pm = Connection(
host='localhost', # 主机名(或IP地址)
port=3306, # 端口,默认3306
user='root', # 账户名
password='520999', # 密码
# autocommit=True
)
# 打印MySQL数据库软件信息,正常显示则连接成功
print(pm.get_server_info()) # 8.0.27
# 获取游标对象,再用对象的方法先后选择数据库,创建表,并且不似MySQL,python中的sql语句写在execute("")中且可以不加分号
py = pm.cursor()
pm.select_db("dbs1") # 选择dbs1数据库,相当于mysql里use dbs1;
py.execute(" CREATE TABLE t1(id INT,tname VARCHAR(10),tage INT,tgender CHAR(1));")#执行后发现mysql的dbs1数据库中有一个表叫t1
py.execute("INSERT INTO t1 VALUES(001, '小222明2', 19, '男'),(002, '小222刚', 20, '女')")
pm.commit() # 注意是连接对象pm而非游标对象py
py.execute("select * from t1")
results: tuple = py.fetchall() # 元组数据不可改变
for item in results:
print(item)
# 关闭到数据库的链接
pm.close()
改进,将大量的SQL写入文件,联合自写的文件调用包模块函数,取代上述功能
from pymysql import Connection
from my_tools.file_tools import openfile # 引入自写的文件打开函数
pm = Connection(
host='localhost',
port=3306,
user='root',
password='520999',
autocommit=True #设置任意操作都可以自动提交而不需要插入一次数据就写个pm.commit()
)
print(pm.get_server_info()) # 8.0.27
py = pm.cursor()
pm.select_db("dbs1")
py.execute(" CREATE TABLE t1(id INT,tname VARCHAR(10),tage INT,tgender CHAR(1));")
#读取SQL语句文件,将文件内容即SQL语句存在字符串sql1中,放入execute读取也可成功
f = openfile("sql1.txt", "r")
sql1 = f.read()
py.execute(sql1)
py.execute("select * from t1")
results: tuple = py.fetchall()
for item in results:
print(item)
pm.close()