web-dev-qa-db-fra.com

pyodbc + MySQL + Windows: nom de la source de données introuvable et aucun pilote par défaut spécifié

J'essaie de me connecter à MySQL 5.6 sur un hôte local Windows Server 2008 R2 avec pyodbc. J'ai utilisé l'installation complète de l'instance MySQL sur l'hôte local, y compris le connecteur ODBC. Je le connecte magnifiquement à une instance SQL Server distante, mais je ne parviens pas à le connecter à l’instance MySQL locale. J'utilise ce guide de connectionstrings.com comme référence.

Voici un code:

import pyodbc

def create_mssql_conn():
    return pyodbc.connect(r'Driver={SQL Server};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')

def create_mysql_conn():
    return pyodbc.connect(r'Provider=MSDASQL;Driver={MySQL ODBC 5.6 UNICODE Driver};Server=127.0.0.1;Database=ecomm;User=root;Password=myP@$$w0rd;Option=3;')

# conn = create_mssql_conn() # This one works
conn = create_mysql_conn() # This one breaks
cursor = conn.cursor()
cursor.execute('SELECT * FROM inventory')

while 1:
    row = cursor.fetchone()
    if not row:
        break
    print row

Voici l'erreur:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

J'ai tout essayé, de l'ajout de Provider=MSDASQL; à la modification de ANSI en UNICODE dans la chaîne de connexion. Aucune suggestion?

7
sct.chang

J'avais un problème similaire. J'utilise Windows 8 et MySQL. 

J'ai résolu le problème en entrant dans ma 

panneau de commande> Systèmes et sécurité> Outils d'administration.> Sources de données ODBC 

La version 32 bits ou 64 bits dépend de votre ordinateur. 

Ensuite, vous cliquez sur le fichier DNS système. Si vous ne voyez pas de pilote MySQL, vous devez cliquer sur Ajouter. Il affiche une liste, à partir de cette liste, sélectionnez le pilote MySQL. 

Pour moi, c’était MySQL ODBC 5.3 ANSI (ils ont aussi un pilote Unicode). Cliquez sur Terminer. Une fois que vous avez fait cela, vous devez changer votre ligne de connexion dans votre code pour le pilote correspondant que vous venez de renseigner. 

Ex:

def create_mysql_conn():

 return pyodbc.connect(r'Driver={MySQL ODBC 5.3 ANSI Driver};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')

Cela devrait fonctionner, ou du moins, cela a résolu mon problème de connexion, car toutes mes erreurs étaient liées à des erreurs différentes. C'est ce qui a résolu le problème pour moi. 

15
Thomas Johnson

Dans Win64, il existe deux ODBC environnements: 32 et 64 bits et vous pouvez travailler avec Python 32 bits ou Python 64 bits. Vérifiez quelle version de Python vous utilisez, puis utilisez la version appropriée de odbcad32.exe (la version 32 bits se trouve dans le répertoire SysWoW64) pour créer SystemDSN. Avec SystemDSN, vous pouvez vérifier si vous pouvez vous connecter à la base de données. Ensuite, essayez de vous connecter à la base de données à partir du code Python.

Vous pouvez lister ODBC sources de données disponibles pour pyodbc via ma recette de code: https://code.activestate.com/recipes/578815-printing-list-of-odbc-data-sources-with-pyodbc -mod/ /

6
Michał Niklas

Allez dans Outils d'administration et les ODBC Sources de données. Vous devriez cliquer sur le fichier DNS. Il est fort probable que Microsoft Access et Excel soient les seules sources de données disponibles. Vous devez donc ajouter votre serveur SQL. Le mien était SQL Server 2008 R2, et jusqu'à présent, cela a fonctionné.

0
gbade_