# -*- coding: utf-8 -*- def import_sqlite(project_id, sqlite_file): print "This is import_sqlite speaking!" print project_id print sqlite_file print "Importing data..." from sqlalchemy import * from sqlalchemy.schema import CreateSchema from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import Session # Initialize sqlite part sqlite_engine = create_engine('sqlite+pysqlite:///project_import_9.ctt4', echo=True) sqlite_session = Session(sqlite_engine) sqlite_meta = MetaData(bind=sqlite_engine) sqlite_meta.reflect() # Initialize postresql part psql_engine = create_engine("postgresql://citavi_mapper:foobar2000@localhost:5432/citavi_mapper") psql_session = Session(psql_engine) psql_engine.execute(CreateSchema('alchemytest')) # TODO: Catch Exception/Warning/Whatever here psql_meta = MetaData(bind=psql_engine, schema='alchemytest') """ # Reflect the origin - maybe psql_meta.reflect() is enough? sqlite_autobase = automap_base() sqlite_autobase.prepare(sqlite_engine, reflect=True) """ # This small snippet prints python class code for sqlalchemy reflected classes for table in sqlite_meta.sorted_tables: table_name = str(table) columns = table.columns.items() print "class " + table_name + "(Base):" print " __tablename__ = '" + table_name + "'" print for column_tuple in columns: column_name = column_tuple[0] actual_sqlalchemy_column = column_tuple[1] column_type = str(vars(actual_sqlalchemy_column)['type']) column_type = str(vars(actual_sqlalchemy_column)['type']) #print table_name + "." + column_name + ': ' + column_type print " " + column_name + " = Column(" + column_type + ")" print print # Shove it up into postgresql's ... you know. psql_meta.create_all(psql_engine) #sqlite_meta.reflect() #meta.tables['Reference'] #meta.tables['ReferenceAuthor'].select().execute().fetchall() # Now we need to "convert" unsupported types :-/ """ for table in meta.sorted_tables: table_name = str(table) columns = table.columns.items() for column_tuple in columns: column_name = column_tuple[0] actual_sqlalchemy_column = column_tuple[1] column_type = str(vars(actual_sqlalchemy_column)['type']) print table_name + "." + column_name + ': ' + column_type print print """ """ TODO: since DATETIME (sqlite3) does not map onto TIMESTAMP / DATE (postgresql), some mapping/migrating is required! """ pass