• 使用Python操作SQLite


    1、连接数据库

    import sqlite3
    conn = sqlite3.connect('example.db')
    
    • 1
    • 2

    其中 example.db 是数据库文件名,如果不存在则会自动创建。connect() 方法还可以接收多个参数,用于设置连接属性,如

    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    # 其中 isolation_level 表示事务隔离级别,timeout 表示超时时间,None 表示不限制。
    
    • 1
    • 2

    2、Python 如何创建 SQLite 数据库表

    import sqlite3
    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS stocks
    (date text, trans text, symbol text, qty real, price real)''')
    # 以上代码创建了一个名为 stocks 的表,包含 date、trans、symbol、qty、price 五个字段,分别表示日期、交易类型、股票代码、数量和价格。其中 IF NOT EXISTS 表示如果表已经存在则不再创建。
    conn.commit()
    conn.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、操作SQLite数据库

    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    c.execute("INSERT INTO stocks VALUES ('2006-01-05', 'BUY', 'RHAT', 100, 35.14)")
    # 以上代码插入了一条数据,日期为 2006-01-05,交易类型为 BUY,股票代码为 RHAT,数量为 100,价格为 35.14。
    conn.commit()
    conn.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    for row in c.execute("SELECT * FROM stocks WHERE date='2006-01-05'"):
        print(row)
    conn.close()
    # 以上代码查询了表 stocks 中股票代码为 RHAT 的数据,并打印出来。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    c.execute("UPDATE stocks SET qty=200 WHERE symbol='RHAT'")
    conn.commit()
    conn.close()
    # 以上代码更新了表 stocks 中股票代码为 RHAT 的数据,将数量改为 200。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    c.execute("DELETE FROM stocks WHERE symbol='RHAT'")
    conn.commit()
    conn.close()
    # 以上代码删除了表 stocks 中股票代码为 RHAT 的数据。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    conn = sqlite3.connect('example.db', isolation_level=None, timeout=5)
    c = conn.cursor()
    try:
        c.execute("BEGIN")
        c.execute("UPDATE stocks SET qty=200 WHERE symbol='RHAT'")
        c.execute("COMMIT")
    except:
        c.execute("ROLLBACK")
        conn.close()
    # 以上代码使用 BEGIN 开始一个事务,如果执行过程中出现异常,则使用 ROLLBACK 回滚事务,否则使用 COMMIT 提交事务。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    查看数据库中的所有表名及其字段:

    # 获取sqlite3数据库mydb.db中的表名和表字段名
    import sqlite3
    sqlite_path = r'E:\cbdb_sqlite\CBDB_20190424.db'
    def sqlite_table(sqlite_path):
        conn = sqlite3.connect(sqlite_path)
        cur = conn.cursor()
        # 获取表名,保存在table_name列表
        cur.execute("select name from sqlite_master where type='table'")
        rows = cur.fetchall()
        table_name = [row[0] for row in rows]
        return table_name
        # 获取表的列名(字段名),保存在col_names列表,每个表的字段名集为一个元组
    def sqlite_col_name(sqlite_path, table_name):
        conn = sqlite3.connect(sqlite_path)
        cur = conn.cursor()
        col_names = []
        cur.execute('pragma table_info({})'.format(table_name))
        col_name = cur.fetchall()
        col_name = [x[1] for x in col_name]
        col_name = tuple(col_name)
        col_names.append(col_name)
        return col_names
    sqlite_table(sqlite_path)
    sqlite_col_name(sqlite_path=sqlite_path, table_name='tablesfields')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    信息论随笔(三)交互信息量
    带你吃透(Netty+Redis+ZooKeeper+高并发实战)从底层原理开始剖析
    【Java|golang】652. 寻找重复的子树---dfs遍历
    mysql的DDL语言和DML语言
    leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵
    微服务moleculer03
    JWT技术实现用户token令牌管理(9月20号)
    Android10 SystemUI系列 需求定制(一)状态栏控制中心默认tile定制属性适配
    【sass中文文档】
    idea2023和easyconnect代理问题
  • 原文地址:https://blog.csdn.net/m0_37134868/article/details/137920677