zoukankan      html  css  js  c++  java
  • python内置的sqlite3模块,使用其内置数据库

    1、python内置的sqlite3模块,创建数据库中的表,并向表中插入数据,从表中取出所有行,以及输出行的数量。

    #!/usr/bin/env python3
    #创建SQLite3内存数据库,并创建带有四个属性的sales表
    #sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程
    import sqlite3
    #使用‘:memory:’在内存中创建了一个数据库,创建了连接对象con来代表数据库
    con = sqlite3.connect(':memory:')
    #创建表名为sales的表,将这个字符串赋值给query
    query = """CREATE TABLE sales
                (customer VARCHAR(20),
                product VARCHAR(40),
                amount FLOAT,
                date DATE);"""
    #使用连接对象的execute()方法执行query中的SQL命令
    con.execute(query)
    #使用连接对象的commit()方法将修改提交(保存)到数据库
    con.commit()
    #向表中插入几行数据
    data = [('Richard Lucas','Notepad',2.50,'2019-01-02'),
            ('Jenny Kim','Binder',4.15,'2019-01-05'),
            ('Svetlana Crow','Printer',155.75,'2019-02-03'),
            ('Stephen Randolph','Computer',679.40,'2019-02-20')]
    #将插入语句赋给变量statement,?是占位符
    statement = "INSERT INTO sales VALUES(?,?,?,?)"
    #因为有四个占位符,这里就需要提供一个包含4个值的元组,executemany()方法为data中的每个数据元组执行
    #statement中的SQL命令,这里执行了四次insert命令
    con.executemany(statement,data)
    #将修改保存到数据库
    con.commit()
    #查询sales表,并将命令结果赋值给一个光标对象cursor,光标对象有execute、executemany、fetchone、
    #fetchmany和fetchall方法
    cursor = con.execute("SELECT * FROM sales")
    #返回结果集中的所有行
    rows = cursor.fetchall()
    print(rows)
    print('………………')
    #查询结果中行的数量
    row_counter = 0
    for row in rows:
        print(row)
        row_counter += 1
    print('………………')
    print('Number of rows: %d' % (row_counter))

    Spyder右下角打印出来的结果:

    [('Richard Lucas', 'Notepad', 2.5, '2019-01-02'), ('Jenny Kim', 'Binder', 4.15, '2019-01-05'), ('Svetlana Crow', 'Printer', 155.75, '2019-02-03'), ('Stephen Randolph', 'Computer', 679.4, '2019-02-20')]
    ………………
    ('Richard Lucas', 'Notepad', 2.5, '2019-01-02')
    ('Jenny Kim', 'Binder', 4.15, '2019-01-05')
    ('Svetlana Crow', 'Printer', 155.75, '2019-02-03')
    ('Stephen Randolph', 'Computer', 679.4, '2019-02-20')
    ………………
    Number of rows: 4

    2、python内置的sqlite3模块,向表中插入新纪录

    名称为“CSV测试数据.csv”的数据源:

     将本地“CSV测试数据.csv”的数据导入到本地数据库football_game.db中:

    #!/usr/bin/env python3
    #创建SQLite3内存数据库,并创建带有四个属性的sales表
    #sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程
    import sqlite3
    import csv
    input_file = "F://python入门//数据1//CSV测试数据.csv"
    #为一个简单的本地数据库football_game.db创建连接,football_game.db为数据库名称
    con = sqlite3.connect('football_game.db')
    #创建了一个光标
    c = con.cursor()
    #如果表名存在,则删除它
    drop_table = """DROP TABLE IF EXISTS football_game;"""
    c.execute(drop_table)
    con.commit()
    #创建表名为football_game的表,将这个字符串赋值给create_table
    create_table = """CREATE TABLE IF NOT EXISTS football_game
                (name VARCHAR(20),
                sex VARCHAR(10),
                age INT,
                score INT,
                device_number VARCHAR(20),
                cost VARCHAR(20));"""
    #使用连接对象的execute()方法执行create_table中的SQL命令
    c.execute(create_table)
    #使用连接对象的commit()方法将修改提交(保存)到数据库
    con.commit()
    #从CSV格式的输入文件中读取要加载到数据库中的数据,创建file_reader对象,用于存储CSV中的数据集
    file_reader = csv.reader(open(input_file,'r'),delimiter=',')
    #从输入文件中读入第一行
    header = next(file_reader,None)
    #将输入的所有数据进行循环,先是每行循环,再是每列循环
    for row in file_reader:
        data = []
        for column_index in range(len(header)):
            data.append(row[column_index])
        print(data)
        c.execute("INSERT INTO football_game VALUES(?,?,?,?,?,?)",data)
        
    #将修改保存到数据库
    con.commit()
    print('………………')
    #执行选择所有数据的SQL
    output = c.execute("SELECT * FROM football_game")
    #返回结果集中的所有行,返回的是一个大的列表
    rows = output.fetchall()
    print(rows)
    print('………………')
    for row in rows:
        output = []
        for column_index in range(len(row)):
            output.append(str(row[column_index]))
        print(output)

    Spyder右下角打印出来的结果:

    ['李刚', '', '32', '567', '18512349553', '$500.00 ']
    ['王红', '', '54', '423', '18256785181', '$750.00 ']
    ['孙晓', '', '25', '457', '13698762112', '$250.00 ']
    ['郭亮', '', '65', '350', '18654320816', '$125.00 ']
    ['高英', '', '15', '390', '18511113141', '$815.00 ']
    ………………
    [('李刚', '', 32, 567, '18512349553', '$500.00 '), ('王红', '', 54, 423, '18256785181', '$750.00 '), ('孙晓', '', 25, 457, '13698762112', '$250.00 '), ('郭亮', '', 65, 350, '18654320816', '$125.00 '), ('高英', '', 15, 390, '18511113141', '$815.00 ')]
    ………………
    ['李刚', '', '32', '567', '18512349553', '$500.00 ']
    ['王红', '', '54', '423', '18256785181', '$750.00 ']
    ['孙晓', '', '25', '457', '13698762112', '$250.00 ']
    ['郭亮', '', '65', '350', '18654320816', '$125.00 ']
    ['高英', '', '15', '390', '18511113141', '$815.00 ']

     3、python内置的sqlite3模块,更新数据表中的记录

    名称为“CSV测试数据.csv”的数据源:

    更新表中的记录:

    #!/usr/bin/env python3
    #创建SQLite3内存数据库,并创建带有四个属性的sales表
    #sqlite3模块,提供了一个轻量级的基于磁盘的数据库,不需要独立的服务器进程
    import sqlite3
    import csv
    input_file = "F://python入门//数据1//CSV测试数据.csv"
    #使用‘:memory:’在内存中创建了一个数据库,创建了连接对象con来代表数据库
    con = sqlite3.connect(':memory:')
    #创建表名为sales的表,将这个字符串赋值给query
    query = """CREATE TABLE IF NOT EXISTS sales
                (customer VARCHAR(20),
                product VARCHAR(40),
                amount FLOAT,
                date DATE);"""
    #使用连接对象的execute()方法执行query中的SQL命令
    con.execute(query)
    #使用连接对象的commit()方法将修改提交(保存)到数据库
    con.commit()
    #向表中插入几行数据
    data = [('Richard Lucas','Notepad',2.50,'2019-01-02'),
            ('Jenny Kim','Binder',4.15,'2019-01-05'),
            ('Svetlana Crow','Printer',155.75,'2019-02-03'),
            ('Stephen Randolph','Computer',679.40,'2019-02-20')]
    #for tuple in data:
    #    print(tuple)
    #将插入语句赋给变量statement,?是占位符
    statement = "INSERT INTO sales VALUES(?,?,?,?)"
    #因为有四个占位符,这里就需要提供一个包含4个值的元组,executemany()方法为data中的每个数据元组执行
    #statement中的SQL命令,这里执行了四次insert命令
    con.executemany(statement,data)
    #将修改保存到数据库
    con.commit()
    #读取CSV文件并更新特定的行
    file_reader = csv.reader(open(input_file,'r'),delimiter=',')
    #从输入文件中读入第一行
    header = next(file_reader,None)
    #将输入的所有数据进行循环,先是每行循环,再是每列循环
    for row in file_reader:
        data = []
        for column_index in range(len(header)):
            data.append(row[column_index])
        con.execute("UPDATE sales SET amount=?,date=? where customer=?;",data)  
    #将修改保存到数据库
    con.commit()
    #查询sales表,并将命令结果赋值给一个光标对象cursor,光标对象有execute、executemany、fetchone、
    #fetchmany和fetchall方法
    cursor = con.execute("SELECT * FROM sales")
    #返回结果集中的所有行
    rows = cursor.fetchall()
    print(rows)
    print('………………')
    for row in rows:
        output = []
        for column_index in range(len(row)):
            output.append(str(row[column_index]))
        print(output)

    Spyder右下角打印出来的结果:

    [('Richard Lucas', 'Notepad', 4.25, '2019-11-05'), ('Jenny Kim', 'Binder', 6.75, '2019-12-05'), ('Svetlana Crow', 'Printer', 155.75, '2019-02-03'), ('Stephen Randolph', 'Computer', 679.4, '2019-02-20')]
    ………………
    ['Richard Lucas', 'Notepad', '4.25', '2019-11-05']
    ['Jenny Kim', 'Binder', '6.75', '2019-12-05']
    ['Svetlana Crow', 'Printer', '155.75', '2019-02-03']
    ['Stephen Randolph', 'Computer', '679.4', '2019-02-20']
  • 相关阅读:
    AGC034F
    loj6074
    杂题
    ICPC2020南京
    CF1326F2
    Codeforces Round #692 Div1
    CF1463F
    SRM582 SemiPerfectPower
    10月30日考试 题解(质数+最小生成树+模拟+DP优化)
    10月28日考试 题解(贪心+二分+树形DP+期望+线段树)
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/12638549.html
Copyright © 2011-2022 走看看