Skip to content

Database #15

@eziceice

Description

@eziceice

Python的数据库接口

  • 任何支持2.0版本的DB API的数据库模块都必须定义3个描述模块特性的全局变量.

    1. apilevel - 所使用的Python DB API版本.
    2. threadsatety - 模块的线程安全等级. 0表示线程完全不共享模块,3表示模块式完全线程安全的. 1表示线程本身可以共享模块,但不对应连接共享. 如果不使用多线程,则可以忽略这个变量.
    3. paramstyle - 在SQL查询中使用的参数风格. 在执行多次类似查询的时候,参数是如何被拼接到SQL查询中的.
  • 为了使用底层的数据库系统,首先必须连接到它,使用connect(). connect()函数的常用参数如下.

    1. dsn - 数据源名称,给出该参数表示数据库依赖.
    2. user - 用户名
    3. password - 用户密码
    4. host - 主机名
    5. database - 数据库名
  • connect()函数将返回一个connect对象,该对象表示目前和数据库的会话. 支持的方法如下.

    1. close() - 关闭和数据库的连接, 连接对象和游标都不可使用.
    2. commit() - 如果支持的话就将提交挂起的事物, 否则不做任何事.
    3. rollback() - 回滚挂起的事物(可能不可用).
    4. cursor() - 返回连接的游标对象.
  • cursor()方法将返回一个游标对象.通过游标执行SQL查询并检查结果. 常用的方法如下.

    1. callproc(name[, params]) - 使用给定的名称和参数调用已命名的数据库过程.
    2. close() - 关闭游标,之后游标不可用.
    3. execute(oper[, params]) - 执行一个SQL,可能带有参数.
    4. executemany(oper, pseq) - 对序列中的每一个参数集执行SQL操作.
    5. fetchone() - 把查询的结果集中的下一行保存为序列, 或者None.
    6. fetchmany([size]) - 获取查询结果集中的多行,默认尺寸为arraysize.
    7. fetchall() - 将所有(剩余)的行作为序列的序列.
    8. nextset() - 跳至下一个可用的结果集(可选).
    9. setinputsizes(sizes) - 为参数预先定义内存区域.
    10. setoutputsizes(size[, col]) - 为获取的大数据的值设定缓冲区尺寸.
  • cursor对象的特性(property).

    1. description - 结果列描述的序列,只读.
    2. rowcount - 结果中的行数,只读.
    3. arraysize - fetchmany中返回的行数,默认为1.
  • 底层数据库可能需要一些特殊的类型的值,如果需要和Python的类型对应,需要使用对应的api将Python的对象封装成数据库支持的类型.

import sqlite3
with sqlite3.connect('somedatabase.db') as db:
    db.cursor()
    db.commit()
  • 使用cursor执行select语句时, 先使用execute()执行语句,然后用fetchall()获得结果.

  • 如果不是大量的数据或者有大型数据库服务器的需求,可以使用sqlite3 in Python. 该数据库为Python内置的服务器,可以满足一些小型的需求. 使用比较方便.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions