Skip to content

Instantly share code, notes, and snippets.

@FabrizioCafolla
Created September 2, 2021 09:31
Show Gist options
  • Save FabrizioCafolla/a9f32d1cd1b50e56dea534f475698d8d to your computer and use it in GitHub Desktop.
Save FabrizioCafolla/a9f32d1cd1b50e56dea534f475698d8d to your computer and use it in GitHub Desktop.
SQLite dump to MySQL dump with python 3
#!/usr/bin/env python3
#
# Converte un dump sqlite in mysql
#
# Esempi:
# cat db.sqlite | python sqlite2mysql > db.mysql
# cat db.sqlite | ./sqlite2mysql > db.mysql
#
# INPUT:
# - Dump sqlite
#
# Output:
# - Dump mysql
##
import re
import fileinput
def main():
for line in fileinput.input():
process = False
for nope in ('BEGIN TRANSACTION','COMMIT',
'sqlite_sequence','CREATE UNIQUE INDEX'):
if nope in line: break
else:
process = True
if not process:
continue
m = re.search('CREATE TABLE "([a-z_]*)"(.*)', line) or re.search('CREATE TABLE IF NOT EXISTS "([a-z_]*)"(.*)', line)
if m:
name, sub = m.groups()
sub = sub.replace('"','`')
line = '''DROP TABLE IF EXISTS %(name)s;
CREATE TABLE IF NOT EXISTS %(name)s%(sub)s
'''
line = line % dict(name=name, sub=sub)
else:
m = re.search('INSERT INTO "([a-z_]*)"(.*)', line)
if m:
line = 'INSERT INTO %s%s\n' % m.groups()
line = line.replace('"', r'\"')
line = line.replace('"', "'")
line = re.sub(r"([^'])'t'(.)", "\\1THIS_IS_TRUE\\2", line)
line = line.replace('THIS_IS_TRUE', '1')
line = re.sub(r"([^'])'f'(.)", "\\1THIS_IS_FALSE\\2", line)
line = line.replace('THIS_IS_FALSE', '0')
line = line.replace('autoincrement', 'AUTO_INCREMENT')
line = line.replace('not null', 'NOT NULL')
line = line.replace('primary key', 'PRIMARY KEY')
line = line.replace('varchar ', 'TEXT ')
if re.search('^CREATE INDEX', line):
line = line.replace('"','`')
print(line)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment