• SQLite3—数据库的学习—python


    SQLite3

    一、简介。

      SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

      Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

    二、SQL语言。

      学习SQLite之前,必须了解SQL语言,此处只简述本文遇到的几条 SQL语句。(SQL教程更详细请前往

      1、CREATE TABLE 语句用于创建数据库中的表。

    CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)

      2、INSERT INTO 语句用于向表格中插入新的行。

    INSERT INTO 表名称 VALUES (值1, 值2,....)

      3、查找。

      (1)基本查找——SELECT * FROM XX表——查询XX表的所有数据。

      (2)条件查找——SELECT * FROM XX表 WHERE 条件——按条件查询XX表。

      4、排列。

      SELECT * FROM XX表 ORDER BY 排序依据  。——按排列依据从低到高。

    三、python—SQLite语句编写。

    step1:访问和操作SQLite数据时,需要首先导入sqlite3模块,然后创建一个与数据库关联的Connection对象:

    import sqlite3                           #导入模块
    conn = sqlite3.connect('example.db')     #连接数据库
    # 连接到SQLite数据库
    # 数据库文件是example.db
    # 如果文件不存在,会自动在当前目录创建:

    ———————————     >                                                                                                                                                           

    sqlite3.Connection.execute() 执行SQL语句
     sqlite3.Connection.cursor() 返回游标对象
    sqlite3.Connection.commit() 提交事务
    sqlite3.Connection.rollback() 回滚事务
    sqlite3.Connection.close() 关闭连接

    ———————————    >                                                                                                                                                               

    step2:成功创建Connection对象以后,再创建一个Cursor对象,并且调用Cursor对象的execute()方法来执行SQL语句创建数据表以及查询、插入、修改或删除数据库中的数据

    c = conn.cursor()
    # 创建表,
    c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''')
    # 插入一条记录
    c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY', 'RHAT', 100, 35.14)")
    # 提交当前事务,保存数据
    conn.commit()
    # 关闭数据库连接
    conn.close()

    step1和step2代码形成的example.db数据库如下:

    >>>有关execute(sql[, parameters]):该方法用于执行一条SQL语句。(即上文的SQL语句)

      SQL语句传递参数有两种方法,分别使用 问号 和 命名变量 作为占位符。

    # 使用问号作为占位符
    cur.execute("INSERT INTO people VALUES (?, ?)", (who, age))
    # 使用命名变量作为占位符
    cur.execute("SELECT * FROM people WHERE name_last=:who AND age=:age", 
                {"who": who, "age": age})

    ~~~~~~                                                                                                                                                                                                       

    Cursor对象常用方法:

    close(...) 关闭游标 
     execute(...) 执行SQL语句
    executemany(...) 重复执行多次SQL语句
     executescript(...)

    一次执行多条SQL语句

    fetchall(...) 从结果集中返回所有行记录
    fetchmany(...)

    从结果集中返回多行记录

    fetchone(...) 从结果集中返回一行记录

    ~~~~~~                                                                                                                                                                                                       

    在将数据写入数据库时,可先用 sqlite3.connect(":memory:") 连接":memory:"在内存中创建数据库,查询数据无误后,再正式写入数据库。

    例:

    import sqlite3
    conn = sqlite3.connect(":memory:")
    cur = conn.cursor()
    cur.execute("CREATE TABLE people (name_last, age)")
    who = "Dong"
    age = 38
    # 使用问号作为占位符
    cur.execute("INSERT INTO people VALUES (?, ?)", (who, age))
    # 使用命名变量作为占位符
    cur.execute("SELECT * FROM people WHERE name_last=:who AND age=:age", 
                {"who": who, "age": age})
    print(cur.fetchone())

    运行结果如下:

      在正式写入时,记得要关闭连接,即.close()。

    四、SQLite可视化工具——sqlitestudio(简介)。

      sqlitestudio是一款可以帮助用户管理sqlite数据库的工具,该sqlite数据库管理工具具有功能完善的sqlite2和sqlite3工具,视图编码支持utf8,还可以同时打开多个数据库文件,软件支持查看和编辑二进制字段。sqlitestudio软件支持的导出数据格式有csv、html、plain、sql、xml。

    —————————————————————分割线——————————————————————

    利用SQLite完成任务

    任务一:将上次爬到的2019中国大学排名的csv文件存入以自己学号命名的数据库中。

    任务二:查找广东技术师范大学排名。

    任务三:查询并显示,广东省的学校的排名和得分(按照  "科技服务(企业科研经费·千元)"  排名规则,)

    任务一代码实现:

    首先要对读取到的csv文件数据进行处理,使其可以存入数据库。

    f = open("D:\桌面\pytest\2019中国大学排名.csv", 'r', encoding='utf-8')        # 按行读取文件
    data = []
    for line in f.readlines():
        line = line.replace('
    ', '')
        line = line.split(',')                          # 将字符串按照 ',' 分割为列表
        for i in range(len(line)):
            try:                                          # 使用 异常处理 避开 出现中文无法转换 的错误
                if line[i] == '':             # 数据中存在空值,处理为0
                    line[i] = '0'
                line[i] = eval(line[i])    # 将数字 字符串形式 转换为数值,为了能在数据库储存
            except:
                continue
        data.append(tuple(line))

    处理后就可以写入数据库:

    (完整代码)

     1 f = open("D:\桌面\pytest\2019中国大学排名.csv", 'r', encoding='utf-8')        # 按行读取文件
     2 data = []
     3 for line in f.readlines():
     4     line = line.replace('
    ', '')                 
     5     line = line.split(',')                                # 将字符串按照 ',' 分割为列表
     6     for i in range(len(line)):
     7         try:                                          # 使用 异常处理 避开 出现中文无法转换 的错误
     8             if line[i] == '':             # 数据中存在空值,处理为0
     9                 line[i] = '0'
    10             line[i] = eval(line[i])    # 将数字 字符串形式 转换为数值,为了能在数据库储存
    11         except:
    12             continue
    13     data.append(tuple(line))
    14 
    15 
    16 
    17 
    18 import sqlite3                           #导入模块
    19 conn = sqlite3.connect('D:\桌面\pytest\FZY2019310143110.db')     #连接数据库
    20 c = conn.cursor()
    21 headline = ("排名", "学校名称", "省市", "总分", "生涯质量", "培养结果(%)",
    22      "社会声誉", "科研规模","科研质量", "顶尖成果", "顶尖人才", "科技服务", "成果转化","学生国际化(留学生比例)")
    23 c.execute('''CREATE TABLE college {}'''.format(headline))
    24 for i in range(1,len(data)):
    25     c.execute("INSERT INTO college VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",data[i])
    26 conn.commit()                 # 提交当前事务,保存数据
    27 conn.close()             # 关闭数据库连接

    用sqlitestudio呈现结果如下:

     

    (可以看到表中的数据没有单位,这是小编在第21行设置headline时,偷懒的结果,只要将单位补上即可)

    任务二代码实现:(使用SQL查找语句即可)

    1 import sqlite3                           #导入模块
    2 conn = sqlite3.connect('D:\桌面\pytest\FZY2019310143110.db')     #连接数据库
    3 c = conn.cursor()
    4 for row in c.execute("SELECT * FROM college WHERE 学校名称 = '广东技术师范大学'"):
    5     print(row)
    6 
    7 conn.close()             # 关闭数据库连接 

    结果:

    任务三代码实现:(使用SQL排序语句即可)

    1 import sqlite3                           #导入模块
    2 conn = sqlite3.connect('D:\桌面\pytest\FZY2019310143110.db')     #连接数据库
    3 c = conn.cursor()
    4 
    5 for row in c.execute("SELECT 学校名称,科技服务 FROM college WHERE 省市 = '广东' ORDER BY 科技服务"):
    6     print(row)
    7 
    8 conn.close()             # 关闭数据库连接 

    结果如下(从低到高):

    右边数据为科技服务(企业科研经费·千元)

     

  • 相关阅读:
    阿里开源的那个牛X的问题排查工具——Arthas,推出IDEA插件了!
    Serverless 风起云涌,为什么阿里,微软,AWS 却开始折腾 OAM?
    读书笔记 effective c++ Item 6 如果你不想使用编译器自动生成的函数,你需要明确拒绝
    读书笔记 effective c++ Item 5 了解c++默认生成并调用的函数
    读书笔记 effective c++ Item 4 确保对象被使用前进行初始化
    读书笔记 effective c++ Item 3 在任何可能的时候使用 const
    读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
    读书笔记 effective c++ Item 1 将c++视为一个语言联邦
    房产知识 集锦
    读书笔记 --TCP :传输控制协议(二)
  • 原文地址:https://www.cnblogs.com/nicefurmine/p/13018931.html
Copyright © 2020-2023  润新知