Wie schreibt man Querys? (pyodbc -> MSSQL)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
OWT
User
Beiträge: 29
Registriert: Montag 20. Juni 2022, 10:45

hmm, die URL hätte ich nun nicht vermutet. Ich hab die SQLAlchemy Funktion für den URL genommen und dort die gleichen Daten belassen wie für den pyodbc connect :/
Ich bekomm morgen vermutlich den ODBC 18 Treiber, ich hab ihn im Verdacht da er in der Fehlermeldung vorkommt.

Code anbei, vielleicht sieht jemand anders mein Fehler.

Code: Alles auswählen

#Zugang per PYODBC - funktioniert
connect = pyodbc.connect('DRIVER='+treiber+';SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

#Zugang mit SQLAlchemy - Fehlermeldung: NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:SQL Server
import sqlalchemy as sa
from sqlalchemy import MetaData, create_engine

connection_url = sa.engine.URL.create(
    drivername= treiber,
    username= username,
    password= password,
    host= server,
    database= database,
)
print(connection_url)

def main():
    engine = create_engine(connection_url)
    meta_data = MetaData(engine)
    meta_data.reflect()
    for table in meta_data.sorted_tables:
        print("-" * 75)
        print(table.name)
        for column in table.columns:
            print(f"    {column!r}")

if __name__ == "__main__":
    main()
    
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@OWT: Die URL ist halt falsch, und da hier keiner weiss was Du da für Werte einsetzt, kann man schlecht was sagen. Es fehlt der Dialekt, SQLAlchemy muss halt wissen mit welchem DBMS da kommuniziert wird, und anscheinend gibst Du als `drivername` "SQL Server" an was falsch wäre. Das ist eine Information die `pyodbc` braucht. SQLAlchemy muss aber erst einmal überhaupt wissen das `pyodbc` benutzt wird. Das ist ja Teil des Protokolls der URL. Das muss schon so anfangen wie ich das geschrieben habe.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
OWT
User
Beiträge: 29
Registriert: Montag 20. Juni 2022, 10:45

Hallo Blackjack

Das hier keiner meine Verbindungsdetails weiß, ist Absicht! Aber deswegen hab ich beide Verbindungsarten gepostet, dass man sehen kann dass die Variablen 1:1 gleich sind.

@BlackJack, wenn ich den URL nach deiner Vorlage von Hand schreibe funktionierts, mit beiden Treibern dich ich habe. Wenn ich den URL per "SQLAlchemy.engine.URL.create" erstellen lasse, ist der Treiber ganz vorne und es geht nicht^^

Sorry, ich bin "blind naive" davon ausgegangen, dass SQLALchemy seine eigene Verbindung zusammen bekommt und nicht pyodbc im URL braucht. Das "Detail" hatte ich in deinem letzten Post übersehen.

Danke, diese Übersicht ist nochmals deutlich detaillierter als was ich bis jetzt hatte

ps.: die liste meiner Treiber, ich vermute, dass der Name des Default Treibers irritierend ist, für den kann ich aber auch nix.

Code: Alles auswählen

pyodbc.drivers()
output --> ['SQL Server', 'ODBC Driver 13 for SQL Server']
Antworten