目录

Python数据库操作一篇就够了

一、前言:

  • 数据库的支持在软件开发中是必不可少的。
  • 如果你使用纯文本文件来存储数据,这只能实现有限的功能。有些小伙伴可能不同意了,说文件存储更直接,通过封装也能做很多事情。
  • 没错,使用它们确实可以做很多事情,但是有时猴我们也会需要额外的一些更为强大的功能。例如:
  • 自动序列化,这时可能你会说我可以用shelve模块也可以。
  • 支持数据并发访问。
  • 支持多字段、属性等复杂快速搜索,shelve只能做简单的单键查询哦。
  • 当然,上面可能只是一小部分需求,解决的方案有很多。但如果我们处理的数据量足够大时,此时选择数据库应该是个更好的选择。
  • 数据库的操作更佳标准规范化,便于开发人员之前的阅读与交流。

二、Python数据库API

几个重要的常量

  • 支持SQL标准的可用数据库有很多,其中大多数在Python中都有对应的客户端木块。
  • 在学习Python数据库操作的API之前,我们先介绍几个重要的知识点:
  • 1、apilevel:所使用的Python DB API版本。目前最新的是2.0,如果其只支持1.0,那么在2.0中就不适用来。
  • 2、threadsafety:线程安全等级。0表示线程完全不共享模块;1表示线程本身可共享模块,但不对连接共享,如果不使用多线程,基本可以不用考虑该变量;3表示模块完全是线程安全的。
  • 3、paramstyle:在SQL查询中使用的参数风格。也就是在执行sql语句时,参数是如何绑定到SQL语句中的。其值可能为: format:表示使用标准的字符串格式化,如字符串以%s插入; pyformat:扩展的格式代码,用字典进行拼接; qmark:使用?号进行拼接,学过java SQL操作的同学就会很熟悉了,这也是大多数语言采用的; numeric:使用数字进行拼接,也就是数字代表参数的序号,有的从0开始,有的从1开始。 named:表示使用参数名进行拼接。
  • 如果对上面的描述还不是很懂,不用担心,编程,没必要全部记住,指导有这么个东西就可以了,用到的时候再看下文档,用多了自然就懂了。

数据库操作过程中的异常

  • 再操作过程中,难免会遇到些错误,api中通过定义异常来进行更准确的提示。可以通过except进行捕获。
  • 一下是规范中常用的异常类型:
  • 1、StandarError:所有异常的泛型基类。
  • 2、Waring:在非致命错误发生时引发。
  • 3、Error:所有错误条件和泛型基类。
  • 4、InterfaceError:关于接口的错误而非数据库的错误。
  • 5、DatabaseError:与数据库相关的错误基类
  • 6、DataError:与数据库相关的错误,如所存储的值超出了范围。
  • 7、OperationalError:数据库内部操作错误。
  • 8、InternalError:数据库内部错误,比如非法游标。
  • 9、IntegrityError:关系完整性受到影响,比如外键等检查失败。
  • 10、ProgrammingError:用户编程错误,比如未找到表。
  • 11、NotSuSupportedError:请求不支持的特性。

数据库连接操作详解

  • 在使用数据库之前,我们首先需要连接数据库。
  • 这时候需要使用connect函数进行连接,据我所接触的众多编程语言,基本都是使用该名称进行连接。
  • connect函数参数解析:
  • 1、dsn:数据源名称,给出该参数表示数据库依赖,必须。
  • 2、user:用户名,可选。
  • 3、password:用户密码,可选。
  • 4、host:主机名,可选。
  • 5、database:数据库名,可选。
  • 执行来connect操作之后会返回一个连接对象给我们,该连接对象负责了对数据库的管理操作。
  • 返回对象支持操作解析:
  • 1、close():执行后关闭连接,连接对象与其游标均不可用。
  • 2、commit():对于支持事务的数据库,执行则提交挂起的事务。
  • 3、rollback():回滚挂起的事务
  • 4、cursor():返回连接的游标对象。
游标对象:
  • cursor是我们用的最多的。其负责执行SQL查询并检查结果。
  • cursor游标对象解析:
  • callproc(name[,params]):使用给定的名称和参数,参数可选,调用已命名的数据库程序。如调用存储过程。
  • close():关闭游标,关闭后游标不可用。
  • execute(oper[,params]):使用可选参数执行SQL操作
  • executemay(oper,pseq):对序列中的每个参数执行SQL操作。
  • fetchone():把查询结果集中的下一行保存为序列。
  • fetchmany([size]):获取查询结果集中的多行
  • fetchall():将所有剩余的行作为序列的序列
  • nextset():跳至下一个可用的结果集。
  • setinputsizes(sizes):为参数预先定义内存区域。
  • setoutputsizes(size[,col]):未获取的大数据值设定缓冲区域大小。
  • description:结果列描述的序列,只读。
  • rowcount:结果中的行数,只读
  • arraysize:fetchmany返回的行数,默认为1