From ddfcdecb6626292e8479b01c8dcfe9590f7a3638 Mon Sep 17 00:00:00 2001 From: Jan Philipp Timme Date: Wed, 3 Sep 2014 15:24:48 +0200 Subject: [PATCH] [TASK] Begin importing the schema - this only works with a created type - looking for alternative ways. --- service/sqlitehelper.py | 58 ++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/service/sqlitehelper.py b/service/sqlitehelper.py index 0c9b3e9..c59421e 100644 --- a/service/sqlitehelper.py +++ b/service/sqlitehelper.py @@ -7,19 +7,33 @@ def import_sqlite(project_id, sqlite_file): print "This is import_sqlite speaking!" print project_id print sqlite_file - print "Importing Data is still a TODO!" + print "Importing data..." from sqlalchemy import * from sqlalchemy.schema import CreateSchema - - engine = create_engine('sqlite+pysqlite:///project_import_9.ctt4', echo=True) - meta = MetaData(bind=engine) - meta.reflect() - #meta.tables['Reference'] - #meta.tables['ReferenceAuthor'].select().execute().fetchall() + from sqlalchemy.ext.automap import automap_base + from sqlalchemy.orm import Session - # Now we need to "convert" unsupported types :-/ - for table in meta.sorted_tables: + # 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) + """ + + # Now that sh- super stuff is reflected and i can go on, using the Table instances. + for table in sqlite_meta.sorted_tables: table_name = str(table) columns = table.columns.items() for column_tuple in columns: @@ -30,12 +44,30 @@ def import_sqlite(project_id, sqlite_file): 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! """ - # Shove it up into postgresql's ... you know it. - psql_engine = create_engine("postgresql://citavi_mapper:foobar2000@localhost:5432/citavi_mapper") - psql_engine.execute(CreateSchema('alchemytest')) - meta.create_all(psql_engine) pass \ No newline at end of file