将sql脚本转换为sqlite格式并通过本地sql连接读取
在写完上面的方法后,我又想到另一种解决思路,就是将sql脚本转换成sqlite语法的sql语句,然后直接加载。各种类型的数据库的sql语句变化较大,下面的方法仅针对SQLyog导出的mysql脚本测试通过,如果是其他的数据库,可能下面的方法仍然需要微调。最好是先自行将sql脚本转换为sqlite语法的sql语句后,再使用我写的方法加载。
加载sql脚本的方法:
from sqlalchemy import create_engine import pandas as pd import re def load_sql2sqlite_conn(sqltxt_path): create_rule = re.compile("create +table [^;]+;", re.I) insert_rule = re.compile("insert +into [^;]+;", re.I) with open(sqltxt_path, encoding="utf-8") as f: sqltxt = f.read() engine = create_engine('sqlite:///:memory:') pos = -1 while True: match_obj = create_rule.search(sqltxt, pos+1) if match_obj: pos = match_obj.span()[1] sql = match_obj.group(0).replace("AUTO_INCREMENT", "") sql = re.sub("\).+;", ");", sql) engine.execute(sql) match_obj = insert_rule.search(sqltxt, pos+1) if match_obj: pos = match_obj.span()[1] sql = match_obj.group(0) engine.execute(sql) else: break tablenames = [t[0] for t in engine.execute( "SELECT tbl_name FROM sqlite_master WHERE type='table';").fetchall()] return tablenames, engine.connect()
参数:
sql_file_path:sql脚本的位置
返回:
两个元素的元组,第一个元素是表名列表,第二个元素是sqlite内存虚拟连接
测试读取:
tablenames, conn = load_sql2sqlite_conn("D:/tmp/test.sql") tablename = tablenames[0] print(tablename) df = pd.read_sql(f"select * from {tablename};", conn) df
结果:
到此这篇关于Pandas直接读取sql脚本的文章就介绍到这了,更多相关Pandas读取sql脚本内容请搜索
标签:SQLite
相关阅读 >>
android之采用execsql与rawquery方法完成数据的添删改查操作详解
Sqlite expert pro5.0如何安装可视化数据库管理软件激活教程
python3 tkinkter + Sqlite实现登录和注册界面
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。