前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day20.python操作数据库

Day20.python操作数据库

作者头像
DataScience
发布2020-09-25 13:47:28
8150
发布2020-09-25 13:47:28
举报
文章被收录于专栏:A2DataA2Data

python操作MySQL模块

mysql-connector-python是MySQL官方提供的

PyMySQL支持python2和python3

MySQLdb只支持python2

本次课程要求:安装MySQL;案例中的账号密码更换为自己的(案例中的账号密码均为root);

安装PyMySQL模块

命令行:pip install pymysql

导入PyMySQL模块

代码语言:javascript
复制
import pymysql

获得连接对象

代码语言:javascript
复制
conn=pymysql.connect(host=' ',user=' ',password=' ',database=' ',charset='utf-8')

获取游标对象通过游标c对数据进行CRUD

提交事务

代码语言:javascript
复制
conn.commit()

关闭游标

代码语言:javascript
复制
c.close()

关闭连接

代码语言:javascript
复制
conn.close()
案例详解

创建数据库

代码语言:javascript
复制
'''创建数据库'''
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数据库成功')

创建表

代码语言:javascript
复制
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('创建数据表成功')

表中插入单条数据

代码语言:javascript
复制
'''插入单条数据'''
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执行成功')

查询数据

代码语言:javascript
复制
'''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数据库

导入模块

代码语言:javascript
复制
import sqlite3  

创建/打开数据库

在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

代码语言:javascript
复制
cx = sqlite3.connect("E:/test.db")  #这里创一个文件

也可以创建数据库在内存中。

代码语言:javascript
复制
con = sqlite3.connect(":memory:")

数据库连接对象

打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

  1. commit()--事务提交
  2. rollback()--事务回滚
  3. close()--关闭一个数据库连接
  4. cursor()--创建一个游标

使用游标查询数据库

代码语言:javascript
复制
c = conn.cursor() #我们需要使用游标对象SQL语句查询数据库,获得查询对象。

游标对象有以下的操作:

  1. execute()--执行sql语句
  2. executemany--执行多条sql语句
  3. close()--关闭游标
  4. fetchone()--从结果中取一条记录,并将游标指向下一条记录
  5. fetchmany()--从结果中取多条记录
  6. fetchall()--从结果中取出所有记录
  7. scroll()--游标滚动

创建表

代码语言:javascript
复制
c.execute('''CREATE TABLE stocks(date text,trans text,symbol text,gty real,price real)''')

向表中插入一条数据

代码语言:javascript
复制
c.execute('''insert into stocks values('2016-01-05','BUY','RHAT',100,35.14)''')
下面为一个完整的案例演示

连接数据库

代码语言:javascript
复制
import sqlite3
#数据库名
db_name = "test.db"
#表名
table_name = "catalog"
conn = sqlite3.connect(db_name)

打开游标

代码语言:javascript
复制
rs=conn.cursor()

建表

代码语言:javascript
复制
sql = 'create table ' + table_name + ' (id varchar(20) primary key, pid integer, name varchar(10))'
try:
    rs.execute(sql)
    print("建表成功")
except:
    print("建表失败")

增删改查

代码语言:javascript
复制
#增:增加三条记录

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([])
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python操作MySQL模块
    • 案例详解
    • CRUD
    • SQLite数据库
    • 数据类型
    • python操作SQLite数据库
      • 下面为一个完整的案例演示
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档