Sqlalchemy kann nicht Element des Typs <Klasse 'sqlalchemy.dialects.oracle.base.NUMBER'> render

stimmen
0

Ich möchte eine Tabelle aus einer Oracle-Datenbank kopieren Datenbank sqlalchemy zum sourceMeta Metadaten Nach dem Einrichten Verbindung und Motor in Oracle und postgre und reflektierenden Tabellen postgre, versuche ich in der destEngine zu schaffen, aber es gibt mir eine Fehlermeldung, kann nicht machen Element des Typs ...

for t in sourceMeta.sorted_tables:
    newtable = Table(t.name, sourceMeta, autoload=True)
    newtable.metadata.create_all(destEngine)
Veröffentlicht am 27/11/2018 um 17:46
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

es scheint, was Sie suchen sqlalchemys @compiles Dekorateur ist. Hier ist ein Beispiel dafür, wie es für mich gearbeitet, wenn sie versuchen Tabellen aus einer MS SQL Server DB zu einer PostgreSQL-DB zu kopieren.

from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.schema import CreateTable
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.dialects.mssql import TINYINT, DATETIME, VARCHAR

@compiles(TINYINT, 'postgresql')
def compile_TINYINT_mssql_int(element, compiler, **kw):
    """ Handles mssql TINYINT datatype as INT in postgresql """
    return 'INTEGER'
# add a function for each datatype that causes an error

table_name = '<table_name>'

# create engine, reflect existing columns, and create table object for oldTable
srcEngine = create_engine('mssql+pymssql://<user>:<password>@<host>/<db>')
srcEngine._metadata = MetaData(bind=srcEngine)
srcEngine._metadata.reflect(srcEngine)  # get columns from existing table
srcTable = Table(table_name, srcEngine._metadata)

# create engine and table object for newTable
destEngine = create_engine('postgresql+psycopg2://<user>:<password>@<host><db>')
destEngine._metadata = MetaData(bind=destEngine)
destTable = Table(table_name.lower(), destEngine._metadata)

# copy schema and create newTable from oldTable
for column in srcTable.columns:
    dstCol = column.copy()
    destTable.append_column(dstCol)
    # maybe change column name etc.
print(CreateTable(destTable).compile(destEngine))  # <- check the query that will be used to create the table
destTable.create()

Überprüfen Sie die Dokumentation: https://docs.sqlalchemy.org/en/13/core/compiler.html und vielleicht auch dieses Beispiel: https://gist.github.com/methane/2972461

Beantwortet am 29/10/2019 um 15:04
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more