Datenbank mit zwei Schemas

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
lambkin
User
Beiträge: 17
Registriert: Dienstag 22. Mai 2018, 08:29

Hi,
ich bin neu hier und komm gerade nicht weiter. Ich hoffe ihr könnte mir in die richtige Richtung helfen.

Ich habe eine postgresql DB, und habe die Daten in einen Dataframe geladen. Hat alles soweit super funktioniert und ich konnte weitermachen.
Nun hat sich aber die Datenbank geändert, und zwar kam ein neuer Satz Daten hinzu und ich habe nun zwei Schemas in der Datenbank. Ich hoffe man nennt das so?
Es sind sozusagen zwei Unterordner. Beide Datensätze enthalten, die gleichen Tabellen, gefüllt mit unterschiedlichen Daten, da es sich um zwei verschiedene Produkte handelt.
Wenn ich nun den Code, der vorher funktioniert hat nutzen will, bekomme ich aber eine Fehlermeldung. Ich nehme an das liegt an den beiden Unterordnern, da Python nun nicht weiß, worauf ich zugreifen möchte? Das Problem besteht auch wenn ich nur eine einzelne Tabelle aus der Datenbank möchte.

Der Code sieht aktuell so aus:

Code: Alles auswählen

engine = create_engine('postgresql+psycopg2://'name und port'/'DB_Name')
connection = engine.connect()
s = "SELECT * from 'Column_name'"
df = pd.read_sql (s, engine)
Könnt ihr mir helfen woran das liegt und wie ich nun auf die Daten zugreifen muss?
DB_Name um das Schema zu erweitern habe ich bereits probiert, Pfadangabe habe ich auch probiert. Ich habe auch probiert in der SQL Anweisung auf den Unterodner zuzugreifen.
Also entweder hab ich das falsch gemacht, oder es gibt einen anderen Weg?

Vielen Dank und liebe Grüße
lambkin
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Auf Tabellen greift man über `schema.tabelle` zu. Wenn das bei Dir nicht geholfen hat, dann wäre es gut, wenn Du den Code und die dazu passende Fehlermeldung posten würdest. Column_name ist ein seltsamer Name für eine Tabelle.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Zusätzlich zu dem was Sirius3 gesagt hat: Wenn du auf eine Tabelle zugreifst ohne das Schema explizit anzugeben, ermittelt postgres das entsprechende Schema durch den search_path.

In deinem Fall könnte es durchaus Sinn machen nicht das Schema explizit anzugeben sondern statt dessen den search_path zu verändern. Wenn du mehrere identische strukturierte Schemata hast kannst du auf die Weise relativ leicht Code wiederverwenden.
lambkin
User
Beiträge: 17
Registriert: Dienstag 22. Mai 2018, 08:29

Danke, hat funktioniert ! :-) Habe nun folgendes abgeändert:

s = "SELECT * from schema_name.view_name"

'Schema_name', und 'view_name' sind natürlich nur Platzhalter für den in der Datenbank festgelegten Namen des Schemas und in dem Fall, der von mir verwendeten View.

Das mit dem search_path werde ich mir auch noch anschauen, vielen Dank für den Tipp!
Antworten