Bonjour,
J’ai des scripts python qui se connectent sur des bases SQL Server pour effectuer des query diverses. Jusqu’à aujourd’hui je n’avis pas de soucis mais je dois me connecter à une nouvelle base de donnée dont la configuration doit etre légèrement différentes de celles que j’utilise déjà. Mes requetes existantes ne fonctionnent plus :
ProgrammingError: (pyodbc.ProgrammingError) ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'articles'. (208) (SQLExecDirectW)")
[SQL: select valeur from articles]
(Background on this error at: https://sqlalche.me/e/14/f405)
Apres recherche je me suis aperçus que j pouvais faire fonctionner la requête en la modifiant la syntaxe de la requête :
select valeur from [base].[schema].[articles]
from sqlalchemy.engine import URL
from sqlalchemy import create_engine
SERVEUR = 'mon_serveur'
cnx_string = ('Driver={SQL Server};'
f'Server={SERVEUR};'
'Trusted_Connection=yes;')
cnx_url = URL.create("mssql+pyodbc", query={"odbc_connect": cnx_string})
engine = create_engine(cnx_url)
cnx = engine.connect()
requete = 'select valeur from articles'
cursor = cnx.execute(requete)
comme j’ai des dizaines de requêtes différentes, je ne voudrais pas avoir à les mettre toutes à jour, existe t’il un moyen, par exemple une option sur la connexion avec sqlalchemy, qui me permette de d’interpréter 'articles’ comme étant '[base].[schema].[articles]' dans mes requêtes.
J’ai posé la question aux admin des bases mais il n’utilisent pas du tout python et pour eux la config de la nouvelle base est identique à celles déja existantes.
Nota: si j’utilise pyodbc à la place de sqlalchemy les requetes de type 'select valeur from articles’ fonctionnent toujours. mais je préférais rester sur sqlalchemy parce que dans certains cas je crée des dataframes et dans ces cas j’ai in warning de pandas pour me dire que l’usage de pyodbc sera bientot déprécié et qu’il faut utiliser sqlalchemy à la place.