首先在本地创建了 an 库, login_user 表, 里面 字段为 username password, 数据为 (admin 123456) (waite 123456)

连接配置


# 数据库连接,主机host、端口port、用户名user、密码passwd、数据库表database
con = pymysql.connect(host='localhost', port=3306, user='root', passwd='An',
                      database='an')#如果汉字显示不出来就加入charset=‘utf-8'

TIPS: 生成游标是必须的,不然无法进行接下面的操作。

import pymysql

# 数据库连接,主机host、端口port、用户名user、密码passwd、数据库表database
con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an')#如果汉字显示不出来就加入charset=‘utf-8'
# h获取一个游标对象
cursor = con.cursor()
# 执行一条SQL语句
cursor.execute("select version()")
# 获取一行数据
data = cursor.fetchone()
print(data)
# 关闭数据库连接,记得关闭游标,后续可以不写
con.close()
"""
('5.7.26-log',)
"""

写入并查询数据

import pymysql

# 数据库连接,主机host、端口port、用户名user、密码passwd、数据库表database
con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an')#如果汉字显示不出来就加入charset=‘utf-8'
# h获取一个游标对象
cursor = con.cursor()
# 执行一条插入SQL语句
sql = 'INSERT INTO login_user(username,password) VALUE ("anan",123456); '
cursor.execute(sql)
# 执行一条查询语句
sql1 = "select * from login_user;"
cursor.execute(sql1)
# 获取一行数据
data = cursor.fetchall()
print(data)
# 关闭数据库连接
con.close()
"""
(('admin', '123456'), ('waite', '123456'), ('anan', '123456'))
"""

一次写入多条语句

sql = "INSERT INTO login_user(username,password) VALUES (%s,%s);"
list_name = [('QA',123456),('shier',123456),('ershi',123456)]
cur.executemany(sql, list_name)

获取数据

data = cur.fetchone()
# 获取查询结果,获取全部数据,如果已经使用fetchone取了第一条的数据,游标会自动向下取值
data_ = cur.fetchall()
# 下标获取查询结果,获取第一条数据,可以更改数字来获取值
data_1 = cur.fetchmany(1)

提交数据

import pymysql

# 数据库连接,主机host、端口port、用户名user、密码passwd、数据库表database
con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an')#如果汉字显示不出来就加入charset=‘utf-8'
# h获取一个游标对象
cursor = con.cursor()
# 执行一条SQL语句
sql = 'INSERT INTO login_user(username,password) VALUE ("anan",123456); '
cursor.execute(sql)
# 提交数据库
con.commit()
sql = "select * from login_user;"
cursor.execute(sql)
# 获取一行数据
data = cursor.fetchall()
print(data)
# 关闭数据库连接
con.close()

在上述过程中,提交数据后前面的数据会被覆盖掉,原因就是没有提交到数据库。

回滚

import pymysql

# 数据库连接,主机host、端口port、用户名user、密码passwd、数据库表database
con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an')#如果汉字显示不出来就加入charset=‘utf-8'
# h获取一个游标对象
cursor = con.cursor()
# 执行一条SQL语句
sql = 'INSERT INTO login_user(username,password) VALUE ("anan",123456); '
try:
 cursor.execute(sql)
 # 提交数据库
 con.commit()
except:
 # 发生错误时回滚
 con.rollback()
# 关闭数据库连接
con.close()

with

使用with语法python会自动释放资源

import pymysql

con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an')
with con:
    cur = con.cursor()
    cur.execute("select *from login_user;")
    data = cur.fetchall()
    print(data)

字典游标

import pymysql
import pymysql.cursors

con = pymysql.connect(host='localhost', port=3306, user='root', passwd='jiang',
                      database='an',cursorclass=pymysql.cursors.DictCursor)
with con:
    cur = con.cursor()
    cur.execute("select *from login_user;")
    data = cur.fetchall()
    for da in data:
        print(da['username'],da['password'])
"""
admin 123456
waite 123456
shier 123456
anan 123456
"""