文件列表:
mytest.db
id timestamp
1 2022-6-17 17:59
2 2022-6-17 17:59
3 2022-6-17 17:59
4 2022-6-17 17:59
5 2022-6-17 17:59
6 2022-6-19 17:38
7 2022-6-19 17:38
8 2022-6-19 17:38
9 2022-6-19 17:38
sqlite3test.py
# coding:utf-8 # @time:2022-06-20 12:28 # @author:kevin # @software:pycharm import sqlite3 as sl # 获取列名/字段名 db = sl.connect('mytest.db') cur = db.cursor() cur.execute("select * from table_data") col_name_list = [tuple[0] for tuple in cur.description] print(col_name_list) # cur.execute("pragma table_info(table_data)") # print(cur.fetchall())
知识延展
1.python获取sqlite3数据库的表名及字段信息
该python代码示例展示了如何使用sqlite3库连接到sqlite数据库mydb.db,获取所有表的名称以及每个表的字段名。首先,通过执行sql查询获取表名,然后对每个表使用pragma命令获取其列名,将结果存储为元组列表。
# 获取sqlite3数据库mydb.db中的表名和表字段名 import sqlite3 def sqlite_void(): conn = sqlite3.connect('d:/data/mydb.db') 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] # 获取表的列名(字段名),保存在col_names列表,每个表的字段名集为一个元组 col_names = [] for i in table_name: cur.execute('pragma table_info({})'.format(i)) col_name = cu.fetchall() col_name = [x[1] for x in col_name] col_name = tuple(col_name) col_names.append(col_name) if __name__ == '__main__': sqlite_void()
2.使用python读取sqlite表个并生成pdf文件
代码用于创建含50列的sqlite数据库并插入500行随机浮点数据,随后读取数据,通过reportlab生成横向pdf表格,包含格式化(两位小数)及表头、网格线等美观样式。
完整代码
# 导入所需库 import sqlite3 # 用于操作sqlite数据库 import random # 用于生成随机数据 from reportlab.lib.pagesizes import landscape, letter # 报表实验室库:页面尺寸(横向letter纸) from reportlab.platypus import simpledoctemplate, longtable # 报表实验室组件:文档模板、长表格 from reportlab.lib import colors # 报表实验室颜色库 from reportlab.lib.styles import getsamplestylesheet # 报表实验室预定义样式 # ==================== 步骤1:创建数据库并生成测试数据 ==================== # 连接到sqlite数据库(如果不存在则自动创建) conn = sqlite3.connect('mydatabase.db') # 创建数据库游标对象,用于执行sql语句 c = conn.cursor() # 动态生成50个列名(col1到col50) columns = [f'col{i+1}' for i in range(50)] # 构建创建表的sql语句:50个real类型(浮点数)的列 create_table_sql = f'create table if not exists tab1 ({", ".join([f"{col} real" for col in columns])})' # 执行sql语句创建表(if not exists避免重复创建报错) c.execute(create_table_sql) # 生成500行随机数据(每行50个0-100之间的浮点数) data = [] for _ in range(500): # 循环500次生成500行 # 每行包含50个随机浮点数(范围0-100) row = [random.uniform(0, 100) for _ in range(50)] data.append(row) # 使用executemany批量插入数据(比循环execute更高效) # sql语句中的?是占位符,对应data中的每个元素 c.executemany(f'insert into tab1 values ({", ".join(["?"]*50)})', data) # 提交事务(将缓存中的数据写入数据库) conn.commit() # 关闭数据库连接 conn.close() # ==================== 步骤2:从数据库读取数据 ==================== # 重新连接数据库(因为之前已关闭) conn = sqlite3.connect('mydatabase.db') c = conn.cursor() # 执行查询语句获取所有数据 c.execute('select * from tab1') # 获取所有查询结果(返回元组的列表,每个元组代表一行数据) rows = c.fetchall() # 获取表的列名(通过cursor.description属性,每个元素的第一个值是列名) columns = [desc[0] for desc in c.description] # 关闭数据库连接 conn.close() # ==================== 步骤3:生成pdf报表 ==================== # 创建pdf文档模板(横向letter纸尺寸,文件名为tab1_data.pdf) doc = simpledoctemplate("tab1_data.pdf", pagesize=landscape(letter)) # 获取预定义的文本样式(用于表格内容) styles = getsamplestylesheet() # 格式化数据为字符串(保留2位小数,提高可读性) formatted_rows = [] for row in rows: # 将每个单元格的浮点数格式化为"%.2f"形式的字符串 formatted_row = [f"{cell:.2f}" for cell in row] formatted_rows.append(formatted_row) # 在表格顶部插入表头行(使用原始列名) formatted_rows.insert(0, columns) # 创建长表格(支持跨页显示) # colwidths参数设置每列宽度(这里每列固定80点,总宽度50 * 80=4000点,适合横向纸) table = longtable(formatted_rows, colwidths=[80] * 50) # 设置表格样式(通过元组列表定义不同区域的样式) table.setstyle([ # 表头区域样式(第0行,所有列) ('background', (0,0), (-1,0), colors.grey), # 背景色(灰色) ('textcolor', (0,0), (-1,0), colors.whitesmoke), # 文字颜色(白色) ('align', (0,0), (-1,-1), 'center'), # 所有单元格文字居中 ('fontname', (0,0), (-1,0), 'helvetica-bold'), # 表头字体(加粗) ('bottompadding', (0,0), (-1,0), 12), # 表头底部内边距(12点) # 数据行区域样式(第1行到最后一行,所有列) ('background', (0,1), (-1,-1), colors.beige), # 背景色(米色) # 全局网格线样式(所有单元格) ('grid', (0,0), (-1,-1), 1, colors.black), # 网格线宽度1点,黑色 # 全局垂直对齐方式(所有单元格顶部对齐) ('valign', (0,0), (-1,-1), 'top') ]) # 将表格添加到pdf文档并构建输出 doc.build([table]) # 输出完成提示 print("pdf已成功生成: tab1_data.pdf")
到此这篇关于python读取sqlite3数据库中的文件并获取列名/字段名的文章就介绍到这了,更多相关python读取sqlite3内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论