1、安装 pip install pymysql
2、连接
import pymysql
db = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8')
try:
with db.cursor() as cursor:
# 插入
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
# 需要手动提交才会执行
db.commit()
with db.cursor() as cursor:
# 读取记录
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
db.close()
补充详解:
'''
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall(): 接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关
的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔
离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永
久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
'''
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost",user='root',\
password="123456",database="mydb",charset='utf8')
'''需要背的1'''# 使⽤ cursor() ⽅法创建⼀个游标对象 cursor 【cursor】 n. 游标, 光标
cursor = db.cursor()
'''需要背的2'''# 使⽤ execute() ⽅法执⾏ SQL 查询 【execute】 vt. 执行, 实行,
cursor.execute("SELECT VERSION()")
cursor.execute("SELECT * FROM stu")
data1 = cursor.fetchall()
print(data1)
'''需要背的3'''# 使⽤ fetchone() ⽅法获取单条数据. Fetch all the rows
# data1 = cursor.fetchone()
'''需要背的4'''# 使⽤ fetchall() ⽅法获取全部数据. Fetch all the rows
data2 = cursor.fetchall()
'''需要背的5'''#使用 %s 占位符来转义更新语句的条件
# print ("Database version : %s " % data1)
print ("Database version : " , data2)
'''需要背的6'''#rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
row = cursor.rowcount
print(row)
#预处理删除表
sql = """DROP TABLE EMPLOYEE"""
cursor.execute(sql)
try:
# 执⾏sql语句
cursor.execute(sql)
# 提交到数据库执⾏
db.commit()
except:
# 如果发⽣错误则回滚
db.rollback()
# 使⽤预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
try:
# 执⾏sql语句
cursor.execute(sql)
# 提交到数据库执⾏
db.commit()
except:
# 如果发⽣错误则回滚
db.rollback()
# SQL 插⼊语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
'''
# 以上例子也可以写成如下形式:
# SQL 插⼊语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', %s, '%s', %s)" % \
('Mac', 'Mohan', 20, 'M', 2000)
'''
try:
# 执⾏sql语句
cursor.execute(sql)
# 提交到数据库执⾏
db.commit()
row = cursor.rowcount
print(row)
except:
# 如果发⽣错误则回滚
db.rollback()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > %s" % (1000)
# 执⾏SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
row = cursor.rowcount
print(row)
#关闭数据库
db.close()
由于每次都需要连接和关闭数据库和游标
所以可以使用with方法来简化代码
import pymysql db = pymysql.connect(host='localhost',user='root',password='abcd1234',db='test',charset='utf8') name=input('请输入用户名:') password=input('请输入密码:') try: with db.cursor() as cursor: sql = 'select * from user where name="%s" and password="%s"' %(name,password) print(sql) cursor.execute(sql) print(cursor.fetchone()) db.commit() finally: db.close()