数据是所有业务处理的核心,不管是交易数据、财务数据还是用户数据,都是非常有价值的。前面一篇文章介绍了python读写文件的方法,我们可以用文件方式来存放数据,不过使用文件方式时不容易管理,同时还容易丢失,会带来许多问题。目前主流的方法都是采用数据库软件,通过数据库软件来组织和存放数据,不管是读还是存都非常方便,速度也有保障。本篇介绍python操作数据库软件的主要方法。

(1)python操作sqlite3

SQLite是采用c来编写的轻量级基于磁盘的关系型数据库,由于其轻量级、操作方便的特点,该数据库成为了数据规模较小类程序的首选。python软件内置了sqlite3库,在python开发时直接使用导入方式即可:

import sqlite3

对于数据库的操作我在之前专栏文章里对关系型数据库的设计和主要操作进行了讲解,链接如下:

peter.cao:WEB/APP开发基础之旅--PHP与数据库交互​zhuanlan.zhihu.com

使用sqlite我们也按照这些操作类型进行介绍,下面我们使用一个小的案例来说明整个操作过程。

步骤1:准备使用sqlite数据库,开始导入sqlite3数据库

import sqlite3

步骤2:连接数据库,同时创建一个demo数据库名字,如果已存在就是连接,如果不存在则为新建。使用sqlite3库的connect方法,在参数中给定数据库的名称,执行该语句将返回一个连接对象。

conn=sqlite3.connect('demo.db')

步骤3:根据业务需求组装sql命令语句,这里需要知晓并且熟悉一些sql命令,即新建数据表、插入记录、删除记录、更新记录和查询记录等。例如首先我们需要新建一个user数据表:

sql

代码中创建了一个主键userid,设定autoincrement自增,数据类型为整型integer,username用户名为varchar变长度类型,给定长度为20,userpwd密码与username一样。

步骤4:执行SQL操作命令,完成数据的业务操作。这里我们沿着步骤3新建数据表完成这个创建过程,即在数据库的demo中创建一个用户user表。实际操作的时候可以直接使用步骤1返回的连接对象,调用其execute方法,传入sql语句。执行sql命令后返回的也是一个对象。我看一般都是使用连接对象的游标方式,这里我直接使用了连接对象,貌似也正常运行了:

conn

步骤5:保存连接结果,同时关闭数据库服务

conn

通过上面的步骤执行后,我们就已经新建了一个数据库和数据表,数据库名为demo,数据表名为user,并且在user表里定义了三个字段,分别是id,username和userpwd。有了user表后,接下来就可以实施一些操作,如添加数据、查询数据、删除数据和更新数据。对于添加、删除和更新这三种操作,我们需要反馈的结果就是成功与否,也就是返回的是逻辑布尔值,而对于查询数据,则需要返回数据表中存在的数据。由此我们可以组装一个函数来处理这四种操作,由此来简化代码;

def 

有了这个公用函数,使用起来就方便多了。接下来我们首先给数据表里增加几行记录:

import 

然后我们可以查询一下现有用户列表:

#查询现有用户列表

执行代码后运行结果如下:

也可以更新或者删除现有用户,具体代码参考如下:

#更新指定用户记录

上述数据库操作过程实际上还可以更抽象一些,就是封装成一个类,专用处理数据相关业务:

class 

再使用的时候就更为方便:

#查询现有用户列表

与sqlite类似,mysql等关系型数据操作步骤是一样的。这里不赘述,只是需要注意这一点就行,那就是对于mysql与python之间的连接,需要安装使用mysql与python的接口库MySQLdb ,然后再在python中导入这个库,并调用其connect方法,给定登录myql软件的ip地址,用户名和密码,以及数据库名即可。参考如下:

import MySQLdb# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

(2)python操作Redis数据库

Redis数据库是典型的非关系型数据库,不要求满足各种范式要求,也不要求有字段定义,非常灵活。其主要结构为key-value键值对,key类型为字符串类型,value类型包括字符串、集合、链表、hash类型等。Redis数据库为内存存储,所以速度很快,目前应用场景较多,主要作为业务与数据库之间的缓存层,当在前端发送请求时,先发送到redis数据库中进行缓存处理,然后设定一定的心跳时间,让redis与服务器mysql数据库保持一致。比如电商系统,对于众多下单但未进行交易结算的业务,如果直接写入数据库,涉及数据写入和读取会给服务器带来非常大的压力,这时可以将这部分未结算的业务放到redis缓存数据库中,用户取消订单时直接修改redis中订单状态即可,由于是内存型缓存和处理,速度就会非常快。而且redis支持存储的value类型非常全面,还可以实现消息队列,实现起来也非常简单。下面我们先从redis的安装开始:

Redis的安装和配置非常简单,从其官网或者github上直接下载下来解压缩即可:

microsoftarchive/redis​github.com

在磁盘解压缩后,打开文件夹,内容如下:

然后打开windows的命令窗口cmd,找到redis解压缩的磁盘目录位置,进入这个文件夹,然后通过键盘敲入redis-server,回车运行就会弹出如下窗口:

此时在该窗口下方提示:服务器已经启动,端口为6379,也就是redis在这个机器上连接的时候使用方式为:本地访问127.0.0.1,端口6379。网络访问:本机公网IP,端口6379。

服务启动后,就可以开始使用python导包和测试使用了。在python中这个redis没有内置,需要导入redis库,在cmd窗口使用:

pip 

应该很快就可以安装完毕。接下来我们也按照操作sqlite数据库方式分步骤实施:

步骤1:首先要启动redis服务器,在上述cmd窗口运行redis-server.exe文件即可。

步骤2:python软件中安装redis库并在代码行带入该库,同时连接上redis服务器,此时python操作的时候相当于redis的一个控制台端,与在redis安装目录下使用redis-cli.exe shell命令基本类似。我们这里继续使用anaconda的spyder模块。

import redis
redis_db=redis.Redis(host='127.0.0.1',port=6379,db=0)

代码调用redis类的Redis连接方法,设定服务器地址,端口号和数据库编号。redis默认一共可以设置16个数据库,如果设置db为0,就是连接第一个数据库。当然也可以修改该配置项,如果不设置,默认为第一个。因为redis库文件都在下载的site-packages里,可以读取其源码进而理解相关类和函数的使用方法。

步骤3:可以开始存储数据了,首先我们来看字符串类型。因为数据结构全是键值对,所以存储的时候都是key-value对,关键词为set,格式为set('key','value'):

redis_db

步骤4:读取redis第一个数据库中的数据,读取的时候使用get(key=keyname)方式:

nameinfo=redis_db.get('name')
ageinfo=redis_db.get('age')

上面为使用字符串类型作为value。整个代码如果写成函数如下:

import 

上述过程完成了数据存储和读取的过程。如果我们要实现redis作为数据缓存,mysql或者sqlite作为数据存储,还要去实现redis与mysql的同步才行,也就是在频繁查询操作时,先查redis内存缓存中是否存在,如果有,就读取redis中的数据,这样速度会很快,避免直接操作数据库。另外也可以采用mysql里的触发机制,当有数据更新时自动同步到redis中。

下面介绍redis的value类型为集合类型set,集合类型可以看做数据容器(类似数组容器)。不过在这个集合里数据不能重复,而且是无序排列的。

我们可以直接从存储set类型数据开始,到读取数据,其基本代码参考如下:

import redis
red_db=redis.Redis(host='localhost',port=6379,db=1)
def setSetData():#sadd(key,values):增加集合,给key名集合中添加value,注意value不能重复red_db.sadd('student','cao','peter','zhangsan','lisi')def getSetData():#smembers(key):用于获取key中所有valueprint(red_db.smembers('student'))#srandmember(key,numbers):设定随机获取key集合中任意几个值print(red_db.srandmember('student',2))def calSetData():#集合的操作:并集sunion、交集sinter、差集sdiffred_db.sadd('employee','lina','zhangsan','lisi1','liuwu')print(red_db.sunion('student','employee'))print(red_db.sdiff('student','employee'))print(red_db.sinter('student','employee'))#对两个集合的交集运算结果保存为新的集合red_db.sinterstore('stuem','student','employee')print(red_db.smembers('stuem'))setSetData()
calSetData()

这里我们直接新建一个redis数据库,序号为1,然后使用连接对象的sadd方法添加集合,smembers方法查看集合中的数据,使用sunion方法查看两个集合中的并集结果,使用sdiff方法查看两个集合的差集结果,使用sinter方法查看两个集合中的交集结果。还可以使用sunionstore、sdiffstore、sinterstore等方法分别将集合运算的结果保存成新的集合。

redis中存储hash类型数据是非常有意义的,类似于字典结构键值对。hash类型基本格式为:

name : {key-value}, {key-value}, {key-value} ...

例如保存一个商品的条目信息:

shoes: {'name': 'Nike', 'price':500,'remains': 1000,'production': 'China'}

这种格式的数据其实非常多,由于没有严格的范式和关系固定要求,结构中key-value可以无限增加,比较灵活。如下代码实践:

import redis
red_db2=redis.Redis(host='localhost',port=6379,db=2)
def setHashData():#hset(name,key,values):增加hash名为name,添加其键值对表述red_db2.hset('student','name','peter')red_db2.hset('student','age','18')red_db2.hset('student','career','engineer')#hmset批量添加键值对red_db2.hmset('shoes',{'name':'Nike','price':500,'store':2000})def getHashData():#hget(name):用于获取name中所有键值对print(red_db2.hget('student','name'))#hgetall():用于获取所有键值对,返回字典结构print(red_db2.hgetall('shoes'))
#先存储
setHashData()
#再读取
getHashData()

python sqlserver 数据操作_python上手--python操作数据库相关推荐

  1. python实现文件管理系统_Python使用文件操作实现一个XX信息管理系统的示例

    大家好,我是第一次python学了一个学期,期末要完成一个毕业生信息管理系统大作业的小韩了,由于上次没有仔细看开发实现的要求,实现了一个简单的毕业生信息管理系统,而这次专门整理了两种使用文件进行保存数 ...

  2. python mysql操作_Python的MySQL操作

    Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库. Python DB-API使用流程: 引入API模块. 获取与数据库的连接. 执行SQL ...

  3. python画笔粗细函数_Python 画图基础操作详解

    python 画图介绍 本文以实用为第一目标,保证读者在看完此文之后可以迅速上手 python 画图,掌握所有画图的基本技巧.(收藏的同时点个赞呗ヽ(•̀ω•́ )ゝ)库加载 我们使用 matplot ...

  4. python数据处理常用函数_Python中常用操作字符串的函数与方法总结

    Python中常用操作字符串的函数与方法总结 这篇文章主要介绍了Python中常用操作字符串的函数与方法总结,包括字符串的格式化输出与拼接等基础知识,需要的朋友可以参考下 例如这样一个字符串 Pyth ...

  5. python中集合运算_Python—集合的操作、文件的操作

    1.集合的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: 1>>> s1 = set('abcd') #同s1 ...

  6. python交互式数据可视化_python数据可视化工具

    熟知python的人都知道,python上常用的一款数据可视化工具是Matplotlib,但是Matplotlib是静态的.那么,Python中除了matplotlib外,还有哪些数据可视化工具呢?其 ...

  7. python提取数据段_python提取数据段 python数据分析

    如何在python中用slice分段取数据? 执行以下操作:&gt&gt a=range(6)&gt&gt a[0, 1, 2, 3, 4,5]&gt& ...

  8. python爬虫数据可视化_python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  9. [转载] python处理数据列_Python中基于跨列的数据处理

    参考链接: Python 克里斯蒂安Cristian算法 python处理数据列 Let's suppose your manager gives you a random dataset and t ...

  10. python多线程数据交互_python 多线程 通信

    一篇文章搞定Python多进程(全) 公众号:pythonislover 前面写了三篇关于python多线程的文章,大概概况了多线程使用中的方法,文章链接如下: 一篇文章搞懂Python多线程简单实现 ...

最新文章

  1. mse函数(均方误差函数)
  2. 如何在solaris下安装memcached
  3. 使用Docker-容器命令案例2
  4. 在word文档的后面开始页码编
  5. 你的眼睛已经睁开了!(转)
  6. 细节:关于异步调用的解决方案
  7. Spring IOC容器和获取组件对象源码分析
  8. KG—Linux添加新的环境变量以及对PATH环境变量的修改
  9. python机器学习库sklearn——k均值聚类
  10. IntelliJ IDEA 快捷键 Windows
  11. 公式推导 11-22
  12. Apache下如何安装ssl证书?PHPWAMP如何开启SSL
  13. 电商项目数据库设计 | 参考京东商城详细讲解商品数据库设计
  14. 安卓如何隐藏root
  15. web期末大作业 用HTML+CSS做一个漂亮简单的节日网页【传日文化节日中秋节】
  16. oracle 12c 字符集修改 AL32UTF8 改为 ZHS16GBK
  17. graphpad如何检测方差齐_看过来!GraphPad软件中的单因素方差分析这样用
  18. 基于ImageAI的图像识别
  19. 阅读文献“Language Models are Unsupervised Multitask Learner”(GPT-2)
  20. 浪潮服务器性能测试,内存、IO子系统性能测试_浪潮服务器_服务器评测与技术-中关村在线...

热门文章

  1. 【工业控制】基于matlab多变量动态矩阵预测控制(DMC)【含Matlab源码 1499期】
  2. 【运动学】基于matlab嫦娥奔月仿真【含Matlab源码 1238期】
  3. 【数字信号调制】基于matlab GUI QPSK调制+解调【含Matlab源码 646期】
  4. 【图像加密】基于matlab GUI混沌系统图像加密解密【含Matlab源码 147期】
  5. 若依可以商用吗_商用自动炒菜机Qamp;A,你想知道的都在这里!
  6. python svm向量_支持向量机(SVM)及其Python实现
  7. 衍射受限透镜成像_成像专题 | 基于孔径阵列的数字全息重建 (AIP APL)
  8. (PyTorch0.4.0) AttributeError: module 'torch' has no attribute 'flatten'
  9. 将字符'0'-'9'转换为数字(c语言)
  10. java接口测试工具_接口模拟测试利器,moco server工具的介绍