Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Stellen Sie mit Flask-SQLAlchemy eine Verbindung zur MSSQL-Datenbank her

Ich hatte gerade ein sehr ähnliches Problem und konnte es folgendermaßen lösen.

Nach der SQL Alchemy-Dokumentation, die ich gefunden habe, könnte ich die mypyodbc-Verbindungszeichenfolge wie folgt verwenden:

# Python 2.x
import urllib
params = urllib.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

# Python 3.x
import urllib
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)


# using the above logic I just did the following
params = urllib.parse.quote_plus('DRIVER={SQL Server};SERVER=HARRISONS-THINK;DATABASE=LendApp;Trusted_Connection=yes;')
app.config['SQLALCHEMY_DATABASE_URI'] = "mssql+pyodbc:///?odbc_connect=%s" % params

Dies hat dann einen zusätzlichen Fehler verursacht, weil ich auch Flask-Migrate verwendet habe und % in der Verbindungs-URI anscheinend nicht mag. Also habe ich noch ein bisschen gegoogelt und bin auf diesen Beitrag gestoßen. Ich habe dann in meiner ./migrations/env.py folgende Zeile geändert Datei

Von:

from flask import current_app
config.set_main_option('sqlalchemy.url',
                   current_app.config.get('SQLALCHEMY_DATABASE_URI'))

An:

from flask import current_app
db_url_escaped = current_app.config.get('SQLALCHEMY_DATABASE_URI').replace('%', '%%')
config.set_main_option('sqlalchemy.url', db_url_escaped)

Nachdem ich all dies getan hatte, konnte ich meine Migrationen durchführen und alles scheint jetzt richtig zu funktionieren.