zoukankan      html  css  js  c++  java
  • SQLite基础使用

    数据库(database):存放数据的仓库,是一些关联表的集合。

    RDBMS(Relational DataBase Management System):关系数据库管理系统,是将数据组织为行和列的系统,是所有现代数据库系统的基础。
    RDBMS的特点:

    1.数据以表格的形式出现  
    2.每行为各种记录名称  
    3.每列为记录名称所对应的数据域  
    4.许多的行和列组成一张表单  
    5.若干的表单组成数据库 
    

    RDBMS术语:
    1.数据库:一些关联表的集合。
    2.数据表:数据的矩阵,数据库中的表看起来像一个个简单的电子表格。
    3.行:行也称为记录,是一组相关的数据。
    4.列:列也称为数据元素,包含了相同的数据。
    5.冗余:存储两倍的数据。
    6.主键:一个数据表中主键是唯一的,可以用主键来查询数据。
    7.外键:用于关联两个数据表。
    8.索引:是对数据表中一列或多列的值进行排序的一种结构。类似于书籍目录。使用索引可以快速访问数据库表中的特定信息。
    9.复合键:将多个列作为一个索引,一般用于复合索引。
    10.参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

    SQLite:SQLite是一个实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。

    ACID事务:事务(Transaction),和现实世界中的交易很类似。
    1.A(Atomicity)原子性:事务成功的条件是事务里所有的操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
    2.C(Consistency)一致性:数据库要一直处于一致的状态,事务的运行不会改变数据库的一致性约束。
    3.I(Isolation)独立性:并发的事务之间不会互相影响,如果有一个事务要访问的数据正在被另外一个事务修改,只要另一个事务未提交,它访问的数据就不受未提交事务的影响。
    4.D(Durability)持久性:指一旦事务提交后,它所做的修改将会永久的保存在数据库上。

    要使用SQLite,必须先安装它:Python3自带sqlite3,旧版本Python必须安装PySQLite才能使用SQLite数据库。然后需要连接到数据库,可以使用函数connect,这个函数接受多个参数,具体是哪些参数取决于使用的数据库。

    函数connect的常用参数

    参数名 描述 是否可选
    dsn 数据源名称(具体含义随数据库而异)
    user 用户名
    password 用户密码
    host 主机名
    database 数据库名称

    函数connect返回一个连接对象,表示当前到数据库的会话。
    连接对象的方法

    方法名 描述
    cursor() 返回连接的游标对象
    commit() 提交未提交的事务
    rollback() 回滚未提交的事务(可能不可用)
    close() 关闭连接对象。关闭后连接对象及其游标将不可用

    连接对象的cursor()方法返回一个游标对象,使用游标来执行SQL操作。
    游标对象的方法

    名称 描述
    fetchone() 以序列的方式取回查询结果的下一行;如果没有更多的行,则返回None
    fetchall() 以序列的方式取回余下的所有行
    fetchmany([size]) 取回查询结果中的多行,参数size默认arraysize
    execute(oper[, params]) 执行一个SQL操作(可指定参数)
    executemany(oper, pseq) 执行指定的SQL操作多次
    close() 关闭游标,关闭后,游标不可用
    nextset() 跳到下一个结果集,这个方法是可选的
    setinputsize(size) 用于为参数预定义内存区域
    setoutputsize(size[, col]) 为取回大量数据而设置缓冲区长度
    callproc(name[, params]) 使用指定的参数调用指定的数据库过程(可选)

    游标对象的属性

    名称 描述
    description 由结果列描述组成的序列(只读)
    rowcount 结果包含的行数(只读)
    arraysize fetchmany返回的行数,默认为1

    sqlite3的使用(Python3)

    import sqlite3
    
    
    def create_table():
        # 创建到数据库文件的连接
        # 只需提供一个文件名(文件路径为相对路径或者绝对路径)
        # 如果指定的文件不存在,将自动创建
        conn = sqlite3.connect("stu.db")
        # 从连接对象获取游标
        curs = conn.cursor()
        # 创建一个数据表
        curs.execute("""
        CREATE TABLE mytest (
            id TEXT PRIMARY KEY,
            name text,
            age INT
        )
        """)
        # 插入两条数据
        curs.execute("INSERT INTO mytest VALUES (1, 'tom', 20)")
        curs.execute("INSERT INTO mytest VALUES (2, 'andy', 28)")
        # 提交所做的操作
        conn.commit()
        # 关闭连接
        conn.close()
    
    
    def query_from_table():
        # 连接到数据库
        conn = sqlite3.connect("stu.db")
        # 获取游标
        curs = conn.cursor()
        # 执行查询操作
        curs.execute("SELECT * FROM mytest")
        # 获取查询到的所有数据
        datas = curs.fetchall()
        print("data is: %s, %s" % (type(datas), datas))
        # 提交操作
        conn.commit()
        # 关闭连接
        conn.close()
    
    
    if __name__ == '__main__':
        # 创建数据表
        create_table()
    
        # 从表中查询数据
        query_from_table()
    

    上面程序的执行结果为

    data is: <class 'list'>, [('1', 'tom', 20), ('2', 'andy', 28)]
    

    从程序输出可以看出,fetchall返回一个list,该list的每一个元素都是tuple。

    本文作者:温茶又折花

    本文链接: https://www.cnblogs.com/dyfblogs/p/14961326.html

    转载文章请注明作者和出处,谢谢!
  • 相关阅读:
    YYControls
    JMS基础教程
    .NET牛人应该知道些什么?
    我(zhangxz)的博客园
    Java多线程 sycronize - wait -notify - notifyall
    .NET牛人应该知道些什么_答案(本答复不是标准答案,敬请兄弟们补充更正)
    HDU OJ 动态规划46题解析
    HDU OJ分类
    JS生成二维码
    C# 往Datatable中添加新行的步骤
  • 原文地址:https://www.cnblogs.com/dyfblogs/p/14961326.html
Copyright © 2011-2022 走看看