python3 使用pymysql

基本操作:
登陆:mysql -uroot -h127.0.0.1 -P3306 -p
mysql -uroot -p(本机不用写host)
退出mysql:ctrl+z+回车,或者exit
端口号默认是3306,但是可以通过安装目录下的配置文件修改。


#安装pymysql

pip3 install pymysql


#连接数据库

import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='1234', db='testdb', charset='utf8')
print (conn)
print (type(conn))


#创建数据库

import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect('localhost',user = "root",passwd = "123456")
#获取游标
cursor=conn.cursor()
#创建pythonBD数据库
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建pythonBD数据库成功')


#创建表

import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#获取游标
cursor=conn.cursor()
print(cursor)

#创建user表
cursor.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cursor.execute(sql)
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建数据表成功')

#插入单条数据

import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')

cur=conn.cursor()#获取游标

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

insert=cur.execute("insert into user values(1,'tom',18)")
print('添加语句受影响的行数:',insert)

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))

cur.close()
conn.commit()
conn.close()
print('sql执行成功')


批量插入多条数据

import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
insert=cur.executemany(sql,[(4,'wen',20),(5,'tom',10),(6,'test',30)])
print ('批量插入返回受影响的行数:',insert)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

查询数据

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

cur.execute("select * from user;")
while 1:
  res=cur.fetchone()
  if res is None:
  #表示已经取完结果集
    break
  print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')


fetchmany

import pymysql
#打开数据库连接
conn=pymysql.connect(‘localhost’,‘root’,‘123456’)
conn.select_db(‘pythondb’)
#获取游标
cur=conn.cursor()

cur.execute(“select * from user”)
#取3条数据
resTuple=cur.fetchmany(3)
print(type(resTuple))
for res in resTuple:
  print (res)

cur.close()
conn.commit()
conn.close()
print(‘sql执行成功’)


fetchall 

import pymysql
#打开数据库连接
conn=pymysql.connect(‘localhost’,‘root’,‘123456’)
conn.select_db(‘pythondb’)
#获取游标
cur=conn.cursor()

cur.execute(“select * from user”)
#取所有数据
resTuple=cur.fetchall()
print(type(resTuple))
print (‘共%d条数据’%len(resTuple))

cur.close()
conn.commit()
conn.close()
print(‘sql执行成功’)


更新数据

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#更新一条数据
update=cur.execute("update user set age=100 where name='kongsh'")
print('修改后受影响的行数为:',update)
#查询一条数据
cur.execute(select * from user where name="kongsh";')
print(cur.fetchone())
cur.close()
conn.commit()
conn.close()
print('sql执行成功')


更新多条数据

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#更新前查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新前的数据为:')
for res in cur.fetchall():
  print (res)

print ('*'*40) 
#更新2条数据
sql="update user set age=%s where name=%s"
update=cur.executemany(sql,[(15,'kongsh'),(18,'wen')])

#更新2条数据后查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新后的数据为:')
for res in cur.fetchall():
  print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')


删除数据

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#删除前查询所有数据
cur.execute("select * from user;")
print('删除前的数据为:')
for res in cur.fetchall():
  print (res)

print ('*'*40) 
#删除1条数据
cur.execute("delete from user where id=1")

#删除后查询所有数据
cur.execute("select * from user;")
print('删除后的数据为:')
for res in cur.fetchall():
  print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

删除多条数据

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#删除前查询所有数据
cur.execute("select * from user;")
print('删除前的数据为:')
for res in cur.fetchall():
  print (res)

print ('*'*40) 
#删除2条数据
sql="delete from user where id=%s"
cur.executemany(sql,[(3),(4)])

#删除后查询所有数据
cur.execute("select * from user;")
print('删除后的数据为:')
for res in cur.fetchall():
  print(res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')


事务回滚

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
  print (res)

print ('*'*40) 
#更新表中第1条数据
cur.execute("update user set name='xiaoxiaoxiaoxiaoren' where id=5")

#修改后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
  print(res)
print ('*'*40)
#回滚事务
conn.rollback()
cur.execute("select * from user;")
print('回滚事务后的数据为:')
for res in cur.fetchall():
  print (res)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

插入100条数据到数据库

import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
  print(res)

print ('*'*40) 
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
for i in range(100):
  random.shuffle(words)#打乱顺序
  cur.execute(sql,(i+1,"".join(words[:5]),random.randint(0,80)))

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
  print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

一次插入多条

import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
  print (res)

print ('*'*40) 
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
random.shuffle(words)#打乱顺序
cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
  print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

原文地址:https://www.cnblogs.com/sea-stream/p/14186797.html