python第三方库sqlite3的基本使用

SQLite个性化特征

  1. 零配置:
  SQLite本身并不需要任何初始化配置文件,也没有安装和卸载的过程。当然也不存在服务器实例的启动和停止。在使用的过程中,也无需创建用户和划分权限。在系统出现灾难时,如电源问题、主机问题等,对于SQLite而言,不需要做任何操作。
  2. 没有独立的服务器:
  和其他关系型数据库不同的是,SQLite没有单独的服务器进程,以供客户端程序访问并提供相关的服务。SQLite作为一种嵌入式数据库,其运行环境与主程序位于同一进程空间,因此它们之间的通信完全是进程内通信,而相比于进程间通信,其效率更高。然而需要特别指出的是,该种结构在实际运行时确实存在保护性较差的问题,比如此时,应用程序出现问题导致进程崩溃,由于SQLite与其所依赖的进程位于同一进程空间,那么此时SQLite也将随之退出。但是对于独立的服务器进程,则不会有此问题,它们将在密闭性更好的环境下完成它们的工作。
  3. 单一磁盘文件:
  SQLite的数据库被存放在文件系统的单一磁盘文件内,只要有权限便可随意访问和拷贝,这样带来的主要好处是便于携带和共享。其他的数据库引擎,基本都会将数据库存放在一个磁盘目录下,然后由该目录下的一组文件构成该数据库的数据文件。尽管我们可以直接访问这些文件,但是我们的程序却无法操作它们,只有数据库实例进程才可以做到。这样的好处是带来了更高的安全性和更好的性能,但是也付出了安装和维护复杂的代价。
  4. 平台无关性:
  这一点在前面已经解释过了。和SQLite相比,很多数据库引擎在备份数据时不能通过该方式直接备份,只能通过数据库系统提供的各种dump和restore工具,将数据库中的数据先导出到本地文件中,之后在load到目标数据库中。这种方式存在显而易见的效率问题,首先需要导出到另外一个文件,如果数据量较大,导出的过程将会比较耗时。然而这只是该操作的一小部分,因为数据导入往往需要更多的时间。数据在导入时需要很多的验证过程,在存储时,也并非简简单单的顺序存储,而是需要按照一定的数据结构、算法和策略存放在不同的文件位置。因此和直接拷贝数据库文件相比,其性能是非常拙劣的。
  5. 弱类型:
  和大多数支持静态类型的数据库不同的是,SQLite中的数据类型被视为数值的一个属性。因此对于一个数据表列而言,即便在声明该表时给出了该列的类型,我们在插入数据时仍然可以插入任意类型,比如Integer的列被存入字符串'hello'。针对该特征唯一的例外是整型的主键列,对于此种情况,我们只能在该列中存储整型数据。
  6. SQL语句编译成虚拟机代码:
    很多数据库产品会将SQL语句解析成复杂的,相互嵌套的数据结构,之后再交予执行器遍历该数据结构完成指定的操作。相比于此,SQLite会将SQL语句先编译成字节码,之后再交由其自带的虚拟机去执行。该方式提供了更好的性能和更出色的调试能力。

SQLite安装

SQLite on Windows

1)进入 SQL 下载页面:SQLite Download Page

2)下载 Windows 下的预编译二进制文件包:

sqlite-shell-win32-x86-<build#>.zip
sqlite-dll-win32-x86-<build#>.zip

(注意: <build#> 是 sqlite 的编译版本号)

  • 下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件。
  • 创建文件夹sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。
  • 添加sqlite 到 PATH 环境变量,以方便在命令行中执行 sqlite 命令。

 可选: 如果你计划发布基于 sqlite 数据库的应用程序,你还需要下载源码以便编译和利用其 API。

sqlite-amalgamation-<build#>.zip

# -*- coding: UTF-8 -*-
# 请看下面代码
import sqlite3
connent = sqlite3.connect("学生成绩管理.db")

#创建一个学生成绩管理表
cur = connent.execute('create table if not exists stuma(num integer primary key,name varchar(20),score integer)')
cur.close()

#增
def insert():
    num = int(input("请输入学号:"))
    name = input("请输入名字:")
    score = int(input("请输入成绩:"))
    cur = connent.execute('insert into stuma(num,name,score) values (?,?,?)',(num,name,score))
    connent.commit()
    cur.close()
#删
def delete():
    num = input("请输入需要删除的学号:")
    cur = connent.execute('select * from stuma where num=?',num)
    result = cur.fetchall()
    cur = connent.execute('delete from stuma where num=?',num)
    connent.commit()
    print('删除的数据为:',result)
    cur.close()

#查
def select():
    num = input('请输入需要查找的学号:')
    cur = connent.execute('select * from stuma where num=?',num)
    result = cur.fetchall()
    if len(result)!=0:
        print('查找的数据为;',result)
    else:
        print('查无此人')
    cur.close()

#改
def update():
    num = input('请输入需要更改的学号:')
    cur = connent.execute('select * from stuma where num=?',num)
    result = cur.fetchall()
    if len(result)!=0:
        name = input("修改的名字:")
        score = int(input("修改的成绩:"))
        print('修改前的数据为;\n',result)
        cur = connent.execute('update stuma set name=?,score=? where num=?',(name,score,num))
        connent.commit()
        cur = connent.execute('select * from stuma where num=?',num)
        result = cur.fetchall()
        print('修改后的数据为:\n',result)
    else:
        print('查无此人!')

    cur.close()

def showAll():
    cur = connent.execute('select * from stuma')
    result = cur.fetchall()
    if len(result)==0:
        print('无数据')
    else:
        for i in result:
            print(i)

    cur.close()

if __name__ == '__main__':
    window = '''
    增(按1)
    删(按2)
    查(按3)
    改 按4)
    查看所有(按5)
    退出(按6)
    '''


    while True:
        print(window)
        choise = int(input('请输入你的选择:'))
        if choise==1:
            insert()
        elif choise==2:
            delete()
        elif choise==3:
            select()
        elif choise==4:
            update()
        elif choise==5:
            showAll()
        elif choise==6:
            break
        else :
            pass
    print('使用结束')

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值