Je viens donc d'avoir un problème très similaire et j'ai pu le résoudre en procédant comme suit.
En suivant la documentation de SQL Alchemy, j'ai découvert que je pouvais utiliser la chaîne de connexion my pyodbc comme ceci :
# 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
Cela a ensuite provoqué une erreur supplémentaire car j'utilisais également Flask-Migrate et apparemment, il n'aime pas % dans l'URI de connexion. Alors j'ai creusé un peu plus et j'ai trouvé ce post. J'ai ensuite modifié la ligne suivante dans mon ./migrations/env.py
fichier
De :
from flask import current_app
config.set_main_option('sqlalchemy.url',
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
À :
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)
Après avoir fait tout cela, j'ai pu effectuer mes migrations et tout semble fonctionner correctement maintenant.