python sqlite3 工具函数

起因, 目的:

sqlite3 最常用的函数。

比如,某人给了一个 database.db 文件。 但是你登录的时候,不知道账号密码。

此文件就是,查看这个数据库的详细内容。

  1. 有哪些表
  2. 某个表的全部内容。
  3. 添加数据
代码, 见注释
python 复制代码
import os
import time
import sqlite3

# sqlite3。添加。保存。
class DB:

    def __init__(self, db_name=None, table_name=None):
        # 如果不提供数据库名称,则自动创建一个。
        dt = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())
        if not db_name:
            self.db_name = f"temp_db_{dt}.db"
        else:
            self.db_name = db_name

        if not table_name:
            self.table_name = f"temp_table_{dt}"
        else:
            self.table_name = table_name

    # 查看全部的 table
    def get_tables(self):
        con = sqlite3.connect(self.db_name)
        c = con.cursor()
        sql = """SELECT name FROM sqlite_master WHERE type='table';"""
        c.execute(sql)
        tables = list(map(lambda i: i[0], c.fetchall()))
        print("All tables: ", tables)
        con.close()
        return tables

    # 查看某个 table 的全部列名
    def get_columns(self, tb_name=None):
        if not tb_name:
            tb_name = self.table_name

        con = sqlite3.connect(self.db_name)
        c = con.cursor()
        sql = f"SELECT * FROM {tb_name}"
        data = c.execute(sql)
        cols = list(map(lambda i: i[0], data.description))
        print("All columns: ", cols)
        con.close()
        return cols

    def add_many(self):
        con = sqlite3.connect(self.db_name)
        c = con.cursor()

        # 表头. 只能创建一次。
        cols = self.get_columns()
        if len(cols) == 0:
            # cols = ("比赛名", "球队名", "比赛时间", "进球数", "红牌")
            c.execute(f'''CREATE TABLE {self.table_name}
                        (game_name text, team_name text, date_time text, score text, price red_card)''')

        # 插入数据。  插入大量的数据。
        purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
                     ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
                     ('2006-04-06', 'SELL', 'A', 500, 53.00),
                     ('2006-04-06', 'EEE', 'V', 5412, 53.00),
                     ('2006-04-06', 'QQ', 'TT', 500, 53.00),
                     ]
        c.executemany('INSERT INTO fake_data VALUES (?,?,?,?,?)', purchases)
        con.commit()
        con.close()

    def show_table(self, tb_name=None):
        if not tb_name:
            tb_name = self.table_name

        con = sqlite3.connect(self.db_name)
        c = con.cursor()
        c.execute(f'SELECT * FROM {tb_name}')
        print("All data: ", c.fetchall())  # 查询全部的数据。
        info = c.fetchall()
        c.close()
        return info

if __name__ == '__main__':
    x = DB(db_name="gc3.db")
    tbs = x.get_tables()

    # x.get_columns()
    # x.show_table()
    # print()

    # x.add_many()
    # x.show_table()

结论 + todo

简单,但是常用,写篇文章,方便自己下次查看。


老哥留步,支持一下。

相关推荐
CryptoRzz12 分钟前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
久未14 分钟前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
java1234_小锋29 分钟前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras.Model来定义模型
python·深度学习·tensorflow·tensorflow2
Learn Beyond Limits34 分钟前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达
java1234_小锋34 分钟前
TensorFlow2 Python深度学习 - 函数式API(Functional API)
python·深度学习·tensorflow·tensorflow2
Y2003091635 分钟前
使用 PyTorch 实现 MNIST 手写数字识别
python
马尚来41 分钟前
移动端自动化测试Appium,从入门到项目实战Python版
python
APItesterCris1 小时前
构建弹性数据管道:利用淘宝商品 API 进行流式数据采集与处理
linux·数据库·windows
天才测试猿1 小时前
WebUI自动化测试:POM设计模式全解析
自动化测试·软件测试·python·selenium·测试工具·设计模式·测试用例
九河云1 小时前
TOS + 数字孪生:集装箱码头的智能进化密码
大数据·服务器·网络·数据库·数字化转型