python操作MySQL模块
mysql-connector-python是MySQL官方提供的
PyMySQL支持python2和python3
MySQLdb只支持python2
本次课程要求:安装MySQL;案例中的账号密码更换为自己的(案例中的账号密码均为root);
安装PyMySQL模块
命令行:pip install pymysql
导入PyMySQL模块
import pymysql
获得连接对象
conn=pymysql.connect(host=' ',user=' ',password=' ',database=' ',charset='utf-8')
获取游标对象通过游标c对数据进行CRUD
提交事务
conn.commit()
关闭游标
c.close()
关闭连接
conn.close()
案例详解
创建数据库
'''创建数据库'''
import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect('localhost',user = "root",passwd = "root")
#获取游标
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 = "root",db = "myemployees")
#获取游标
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','root')
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执行成功')
查询数据
'''fetchone'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','root')
conn.select_db('myemployees')
#获取游标
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执行成功')
'''
(1, 'tom', 18)
(3, 'kongsh', 20)
sql执行成功
'''
CRUD
CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。
增删改的两种操作
操作单条:c.execute('SQL语句',(参数值))
操作多条:c.executemany('SQL语句',(多个参数值))
查的三种操作
拿单条:c.fetchone()
拿多条:fetchmany(size)
拿所有:c.fetchall()
SQLite数据库
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
数据类型
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。
SQLite的主要数据类型有:NULL、INTEGER、REAL、TEXT、BLOB
python操作SQLite数据库
导入模块
import sqlite3
创建/打开数据库
在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。
cx = sqlite3.connect("E:/test.db") #这里创一个文件
也可以创建数据库在内存中。
con = sqlite3.connect(":memory:")
数据库连接对象
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:
commit()--事务提交
rollback()--事务回滚
close()--关闭一个数据库连接
cursor()--创建一个游标
使用游标查询数据库
c = conn.cursor() #我们需要使用游标对象SQL语句查询数据库,获得查询对象。
游标对象有以下的操作:
execute()--执行sql语句
executemany--执行多条sql语句
close()--关闭游标
fetchone()--从结果中取一条记录,并将游标指向下一条记录
fetchmany()--从结果中取多条记录
fetchall()--从结果中取出所有记录
scroll()--游标滚动
创建表
c.execute('''CREATE TABLE stocks(date text,trans text,symbol text,gty real,price real)''')
向表中插入一条数据
c.execute('''insert into stocks values('2016-01-05','BUY','RHAT',100,35.14)''')
下面为一个完整的案例演示
连接数据库
import sqlite3
#数据库名
db_name = "test.db"
#表名
table_name = "catalog"
conn = sqlite3.connect(db_name)
打开游标
rs=conn.cursor()
建表
sql = 'create table ' + table_name + ' (id varchar(20) primary key, pid integer, name varchar(10))'
try:
rs.execute(sql)
print("建表成功")
except:
print("建表失败")
增删改查
#增:增加三条记录
sql = "Insert into " + table_name + " values ('001', 1, '张三')"
try:
rs.execute(sql)
#提交事务
conn.commit()
print("插入成功")
except:
print("插入失败")
sql = "Insert into " + table_name + " values ('002', 2, '李四')"
try:
rs.execute(sql)
#提交事务
conn.commit()
print("插入成功")
except:
print("插入失败")
sql = "Insert into " + table_name + " values ('003', 3, '王五')"
try:
rs.execute(sql)
#提交事务
conn.commit()
print("插入成功")
except:
print("插入失败")
#删:删除pid等于3的记录
sql = "Delete from " + table_name + " where pid = 3"
try:
rs.execute(sql)
conn.commit()
print("删除成功")
except:
print("删除失败")
#改:将pid等于2的记录的pid改为1
sql = "Update " + table_name + " set pid = 1 where pid = 2"
try:
rs.execute(sql)
conn.commit()
print("修改成功")
except:
print("修改失败")
#查:查询数据库中所有表名
sql = "Select name From sqlite_master where type = 'table'"
res = rs.execute(sql)
print(res.fetchall())
#查询表中所有记录
sql = "Select * from " + table_name
try:
res = rs.execute(sql)
print(res.fetchall())
except:
print([])
好文章,我 在看❤