Usage:
sqlite3 <sqlite3_filename> .dump | sqlite3-to-mysql.py | mysql <params>
or
sqlite3 <sqlite3_filename> .sch | sqlite3-to-mysql.py | mysql <params>
#! /usr/bin/env python | |
"""sqlite3-to-mysql.py | |
Usage: sqlite3 <sqlite3_filename> .dump | sqlite3-to-mysql.py | mysql <params> | |
""" | |
import sys | |
def main(): | |
sys.stdout.write("SET sql_mode='NO_BACKSLASH_ESCAPES';\n") | |
lines = sys.stdin.read().splitlines() | |
for line in lines: | |
sys.stdout.write(process_line(line)) | |
sys.stdout.write('\n') | |
sys.stdout.flush() | |
def process_line(line): | |
if (line.startswith("PRAGMA") or | |
line.startswith("BEGIN TRANSACTION;") or | |
line.startswith("COMMIT;") or | |
line.startswith("DELETE FROM sqlite_sequence;") or | |
line.startswith("INSERT INTO \"sqlite_sequence\"")): | |
return '' | |
line = line.replace("AUTOINCREMENT", "AUTO_INCREMENT") | |
line = line.replace("DEFAULT 't'", "DEFAULT '1'") | |
line = line.replace("DEFAULT 'f'", "DEFAULT '0'") | |
line = line.replace(",'t'", ",'1'") | |
line = line.replace(",'f'", ",'0'") | |
in_string = False | |
newline = '' | |
for c in line: | |
if not in_string: | |
if c == "'": | |
in_string = True | |
elif c == '"': | |
newline = newline + '`' | |
continue | |
elif c == "'": | |
in_string = False | |
newline = newline + c | |
return newline | |
if __name__ == "__main__": | |
main() |