由于Python统一了数据库连接的接口,所以 pymysql 和 MySQLdb 在使用方式上是类似的:
pymysql.Connect()参数说明 host(str): MySQL服务器地址 port(int): MySQL服务器端口号 user(str): 用户名 passwd(str): 密码 db(str): 数据库名称 charset(str): 连接编码 connection对象支持的方法 cursor() 使用该连接创建并返回游标 commit() 提交当前事务 rollback() 回滚当前事务 close() 关闭连接 cursor对象支持的方法 execute(op) 执行一个数据库的查询命令 fetchone() 取得结果集的下一行 fetchmany(size) 获取结果集的下几行 fetchall() 获取结果集中的所有行 rowcount() 返回数据条数或影响行数 close() 关闭游标对象
==================Python===================
使用Python脚本实现增删改查和事务处理,源码如下:
import pymysql
import pymysql.cursors
pymysql.install_as_MySQLdb()
# 连接数据库
conn = pymysql.Connect(
host='192.168.121.180',
port=3306,
user='root',
passwd='new-password',
db='python',
charset='utf8'
)
Lie = [('小叶4', '广州从化区',12900.0), ('小张4', '广州番禺区', 8800.6)] ##注意:,号后有空格!!
cur = conn.cursor() #定义游标
cur3 = conn.cursor(cursor=pymysql.cursors.DictCursor) #定义字典类型的游标
'''
#增加数据1
sql = "insert into Stu_info(name,address) value('%s','%s')" ##id是自增的,所以不用占位符
params = ('alex_1','广州天河区') ##
cur.execute(sql % params) ####执行上面的sql和params语句
conn.commit()
print ('成功插入', cur.rowcount, '条数据')
#增加数据2
sql = "insert into Stu_info(name,address) value('%s','%s')" ##id是自增的,所以不用占位符
params = ('雷军','广州越秀区') ##
cur.execute(sql % params) ####执行上面的sql和params语句
conn.commit()
print ('成功插入', cur.rowcount, '条数据')
# 修改数据
sql = "UPDATE Stu_info SET saving = %.2f WHERE name = '%s' " #注意数字要用 %.2f
data = (800, 'alex_1') ##如果仅有800一个参数,应该为:data = (800,)
cur.execute(sql % data) #注意 %符号
conn.commit()
print('成功修改', cur.rowcount, '条数据')
# 删除数据
sql1 = "SELECT name,address,saving FROM Stu_info where name ='%s' "
sql2 = "DELETE FROM Stu_info WHERE name = '%s'"
data = ('alex_1',)
cur.execute(sql1 % data)
for row in cur.fetchall():
print (row)
cur.execute(sql2 % data)
conn.commit()
print('成功删除', cur.rowcount, '条数据')
'''
##查询1:
#reCount = cur.execute('select * from Stu_info') ####execute表示sql语句影响了多少条记录
sql = "SELECT name,address,saving FROM Stu_info WHERE saving > 8000 "
#data = (800,)
cur.execute(sql)
for row in cur.fetchall():
print (row) ##打印每一条记录
print ('共查询到:',cur.rowcount,'条数据,saving大于8000') ##打印有多少条记录受影响
##查询2(列表展示所有的数据):
reCount = cur.execute('select * from Stu_info')
data = cur.fetchall() #获得数据
print(reCount) ##打印有多少条记录受影响
print(data) ##打印获得的数据,以列表的形式展示。
#查询3:字典的形式展示所有的数据:
reCount3 = cur3.execute('select * from Stu_info')
data3 = cur3.fetchall() #获得数据
print("字典的形式展示共%s条数据:%s" %(reCount3,data3)) ##打印获得的数据,以字典的形式展示,这样就会显示列名了。
#批量增加数据和事务处理:
sql4 = "insert into Stu_info(name,address,saving) values(%s,%s,%s)" ##id是自增的,所以不用占位符,注意:values要加s,%s不用引号。
try:
reCount4 = cur.executemany(sql4, Lie) ####执行上面的sql和params语句,注意:Lie前有空格!
except Exception as e:
conn.rollback() # 事务回滚
print ("执行MySQL: %s 时出错:%s" %(sql4, e))
else:
conn.commit()
print ('成功插入',reCount4, '条数据')
# 更新数据和事务处理
sql_1 = "UPDATE Stu_info SET saving = saving + 800.8 WHERE name = '雷军' "
try:
reCount5 = cur.execute(sql_1) # 储蓄增加800.8
except Exception as e:
conn.rollback() # 事务回滚
print ("执行MySQL: %s 时出错:%s" %(sql_1, e))
else:
conn.commit() # 事务提交
print('成功更新',reCount5, '条数据')
cur.close()
conn.close()
#展示演示结果: