使用Python和sqlite3执行mariadb SQL语句的方法?

问题描述 投票:0回答:1

我有一个 sql 转储文件,其中包含我需要查询的整个 maria 数据库。转储有多个 GB 大。

问题是我无权访问本地数据库安装,并且由于公司 IT 安全限制而无法获得本地数据库安装。

我可以通过 sqlite3 中的 python 迭代并执行我的转储吗?我找不到关于如何执行此操作的正确解释。

我使用此代码片段来迭代我的转储,并至少获取所有表名称作为回报,以获取对数据库的概述:

table_list=[]
with open(dmp.file ,encoding='cp437') as f:
    for line in f:
        line = line.strip()
        if line.lower().startswith('create table'):
            table_name = re.findall('create table `([\w_]+)`', line.lower())
            table_list.extend(table_name)
            
for x in table_list:
    print(x)   

这工作得很好,但是在我用于创建表等的转储语句中会跨越多行,因此这种方法不再能很好地工作。我写了以下内容,将语句写成一行。

currentLine = ""
with open(File,encoding='cp437') as f:
for line in f:
   line = line.strip()
   currentLine = currentLine + " " + line
   if line.lower().endswith(';') == True:
       with open(NewFileOneLiner.txt', "a", encoding="utf-8") as g:
       g.write(currentLine.lstrip() + '\n')
       currentLine = ""

我想知道还需要什么额外的步骤,因为从理论上讲,两个 SQL 数据库都可以转换 SQL 语句。有没有办法执行sqlite中的所有语句?这种方法的界限和注意事项在哪里?在这种情况下,sqlite 是否不支持我需要了解的一些 SQL 关键概念?

python sql sqlite mariadb
1个回答
0
投票

虽然有 SQL 标准,但没有人完全遵循它(它是巨大的)并且每个人都扩展它。每个 SQL 数据库都有不同的方言,实现规范的不同部分,并且有自己的怪癖和扩展。更糟糕的是,一些非常标准的 SQL 并不标准。例如,该标准没有提及索引,它们被认为是一个实现问题。 只有最简单的 SQL 才能在不同的实现之间运行相同的结果。

SQLite 被设计为“轻量级”数据库。它的主要特点是不需要服务器,一个程序可以有自己独立的数据库。 SQLite 具有极其有限的 SQL 子集以及与 MariaDB 不同的行为。除了最简单的 SQL 之外,尝试翻译任何内容都是不切实际的,而且我不会相信结果。

我建议与 IT 部门讨论获取完成工作所需的工具,他们应该为您提供 MariaDB 服务器。如果他们不这样做,请去找分配给您该任务的人并通知他们。或者,您可以以不到 1 美元的价格在便宜的虚拟机上安装MariaDB。然后拿一些办公用品要求报销。

© www.soinside.com 2019 - 2024. All rights reserved.