Day20.python操作数据库
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([])
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 将二进制文件加入VC资源后释放执行
- JavaScript中的函数式编程
- JavaScript中的compose函数和pipe函数
- 常用JS函数-数组扁平化,缓存函数,柯里化函数,防抖和节流函数
- JavaScript单元测试及原理
- 前端进阶知识汇总
- 前端也能学算法:由浅入深讲解动态规划
- 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__
- 前端也能学算法:由浅入深讲解贪心算法
- web.py指南性说明
- this到底指向啥?看完这篇就知道了!
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS小数计算不准问题
- python 实现 php 的 var_dump 功能
- RSA初探,聊聊怎么破解HTTPS
- 深入解析Underscore.js源码架构