pymysql访问数据库
安装 pymysql
用于支持 python 连接 mysql。
pip install pymysql…tar.gz
连接数据库
conn=pymysql.connect(host=‘服务器 IP’, port=3306, user=‘用户名’, passwd=‘密码’, db=‘数据库名’, charset=‘utf8’)
port=3306,不能加引号,charset='utf8’可省略,此时使用默认端口和字符
集。
用游标读取数据
cur=conn.cursor( )
sql=select 语句
cur.execute(sql)
data=cur.fetchall( )
获得数据(元组)
cur.close( )
conn.close( )
关闭游标和数据库
用游标插入数据
conn=pymysql.connect(…)
cur=conn.cursor( )
sql=‘insert into 表名 values(%d, “%s”)’ % (变量或常量 1,变量或常量 2)
%s 必须加引号,%d 可加可不加。
(变量或常量 1,变量或常量 2)是元组。
cur.execute(sql)
conn.commit( )
用于提交数据,不可省略。
cur.close( )
conn.close( )
批量提交数据
将很多数据写入数据库时,使用循环每次写入数据会导致服务器压力很大,可
以一次性提交批量数据。
列表.append((变量 1, 变量 2, …, 变量 n))
必须加括号,元组存入列表。
sql=‘insert into 表名 values(%s, %s, %s, …%s)’ 一律使用%s,%s 与变量个数对应,不能加引号。
cur.executemany(sql, 列表)
conn.commit( )
cur.close( ) conn.close( )
代码如下:
一、单条插入数据:
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 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)
# 执行sql语句
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()
二、批量插入数据:
#!/usr/bin/env python
# -*-encoding:utf-8-*-
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","123","testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES (%s,%s,%s,%s,%s)"
# 区别与单条插入数据,VALUES ('%s', '%s', %s, '%s', %s) 里面不用引号
val = (('li', 'si', 16, 'F', 1000),
('Bruse', 'Jerry', 30, 'F', 3000),
('Lee', 'Tomcat', 40, 'M', 4000),
('zhang', 'san', 18, 'M', 1500))
try:
# 执行sql语句
cursor.executemany(sql,val)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# 关闭数据库连接
db.close()
**使用循环批量插入数据**
'''
#查询读取数据库中的内容,存在文件中(元组)
import pymysql
conn=pymysql.connect(host="192.168.31.65",port=13306,user='root',passwd='3.1415926',db='lianxi',charset='utf8')
cur=conn.cursor()
sql="select * from login"
cur.execute(sql)
data=cur.fetchall() #获取数据库的数据(元组)
cur.close()
conn.close()
'''
'''
#给数据库中插入数据
import pymysql
conn=pymysql.connect(host='192.186.31.65',port=13306,user='root',passwd='3.1415926',db='lianxi')
cur=conn.cursor()
sql="insert into login values('%s','%s')"%('yff','123456')
cur.execute(sql)
cur.commit() #数据库插入语句需要提交
cur.close()
conn.close()
'''
#给数据库批量插入数据
import pymysql
conn=pymysql.connect(host='192.186.31.65',port=13306,user='root',passwd='3.1415926',db='lianxi')
cur=conn.cursor() #创建游标
data=[]
for i in range(2,22):
data.append(('list'+str[i],'12345'+str[i])) #利用循环批量插入
sql="insert into login values(%s,%s)" #这里%s没有引号
cur.executemany(sql,data)
cur.commit() #数据库插入语句需要提交
cur.close()
conn.close()