• Python之sqlite3模块


     python自带有sqlite3模块,该模块可以方便我们操作sqlite数据库,下面一起跟随示例了解sqlite3模块的具体用法。

    import sqlite3
    
    # 连接数据库
    connection = sqlite3.connect('demo.db')
    # 创建游标
    cursor = connection.cursor()
    # 创建表
    cursor.execute('''CREATE TABLE IF NOT EXISTS CLASS(
            ID INT PRIMARY KEY     NOT NULL,
            NAME           TEXT    NOT NULL,
            AGE            INT     NOT NULL
            )''')
    # Insert操作
    cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (1, 'Paul', 7)")
    cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (2, 'Allen', 8)")
    cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (3, 'Teddy', 7)")
    cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (4, 'Mark', 9)")
    # 提交当前事务
    connection.commit()
    # Select操作
    cursor.execute("SELECT ID,NAME,AGE from CLASS")
    print("fetchone:", cursor.fetchone())
    print("fetchmany:", cursor.fetchmany(2))
    print("fetchall:", cursor.fetchall())
    # 关闭数据库连接
    connection.close()

    运行结果:

    fetchone: (1, 'Paul', 7)
    fetchmany: [(2, 'Allen', 8), (3, 'Teddy', 7)]
    fetchall: [(4, 'Mark', 9)]

    通过sqlite3.connect()连接了数据库,再通过connection.cursor()函数创建了游标,cursor.execute()函数执行创建表的sql语句,再往表中插入4行数据并调用connection.commit()函数提交。提交完成后执行查询的sql语句,分别调用cursor.fetchone()cursor.fetchmany()cursor.fetchall()来获取查询结果集,顾名思义,fetchone()是获取一行数据、fetchmany(N)是获取N行数据,fetchall是获取剩下所有行数据。值得一提的是,例子中所有用到cursor的地方,其实都可以直接用connection替换,比如cursor.execute()可以被替换成connection.execute(),其实本质上还是调用cursor对象。

    上面例子介绍了sqlite3模块的一些基本用法,下面来看一些其他用法。

    import sqlite3
    
    connection = sqlite3.connect('demo.db')
    cursor = connection.cursor()
    # 重复执行一个sql语句
    cursor.executemany("INSERT INTO CLASS (ID,NAME,AGE) VALUES (?, ?, ?)", [(5, 'Bob', 6), (6, 'Alice', 6), (7, 'Tom', 9)])
    # 查询自数据库连接打开以来被修改、插入或删除的数据库总行数
    print("total_changes:", connection.total_changes)
    cursor.execute("SELECT ID,NAME,AGE from CLASS")
    # 打印插入数据后的结果
    print(cursor.fetchall())
    # 回滚
    connection.rollback()
    cursor.execute("SELECT ID,NAME,AGE from CLASS")
    # 打印回滚后的结果
    print("rollback:", cursor.fetchall())
    connection.commit()
    connection.close()

    运行结果:

    total_changes: 3
    [(1, 'Paul', 7), (2, 'Allen', 8), (3, 'Teddy', 7), (4, 'Mark', 9), (5, 'Bob', 6), (6, 'Alice', 6), (7, 'Tom', 9)]
    rollback: [(1, 'Paul', 7), (2, 'Allen', 8), (3, 'Teddy', 7), (4, 'Mark', 9)]

    此例中新出现了connection.total_changesconnection.executemany()connection.rollback(),它们分别用于统计被修改的行数、多次执行同一条sql语句、回滚操作。

    如果我们想一次性执行多条sql语句,该怎么操作呢?这里可以使用cursor.executescript()函数执行一段sql语句。

    import sqlite3
    
    connection = sqlite3.connect('demo.db')
    cursor = connection.cursor()
    # 执行多个sql语句
    cursor.executescript("""
            DELETE from CLASS where ID=1;
            UPDATE CLASS set AGE = 9 where ID=2;
    """)
    connection.commit()
    cursor.execute("SELECT ID,NAME,AGE from CLASS")
    print(cursor.fetchall())
    connection.close()

    运行结果:

    [(2, 'Allen', 9), (3, 'Teddy', 7), (4, 'Mark', 9)]

    参考资料

    • https://www.runoob.com/sqlite/sqlite-python.html

    作者:酌三巡

    感谢阅读,如需转载请注明出处!

  • 相关阅读:
    fianl关键字和static关键字
    jdk的安装
    this关键字和super关键字
    Java 数组
    网络通信知识复习
    Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”
    CentOS 7 下安装 teamviewer 13
    我的 Putty 配色方案
    在 Mac OS X 下,如何向 sudoers 文件添加新用户
    Windows 7 下使用 pandoc 转换文档格式
  • 原文地址:https://www.cnblogs.com/zhuosanxun/p/15161882.html
Copyright © 2020-2023  润新知