Miałem więc bardzo podobny problem i mogłem go rozwiązać, wykonując następujące czynności.
Postępując zgodnie z dokumentacją SQL Alchemy odkryłem, że mogę użyć mojego ciągu połączenia pyodbc w następujący sposób:
# 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
To spowodowało dodatkowy błąd, ponieważ używałem również Flask-Migrate i najwyraźniej nie podoba mu się % w identyfikatorze URI połączenia. Więc zrobiłem trochę więcej kopania i znalazłem ten post. Następnie zmieniłem następujący wiersz w moim ./migrations/env.py
plik
Od:
from flask import current_app
config.set_main_option('sqlalchemy.url',
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
Do:
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)
Po zrobieniu tego wszystkiego udało mi się przeprowadzić migracje i wszystko wygląda tak, jakby teraz działało poprawnie.