Se connecter à Microsoft SQL server en utilisant Python
j'essaie de me connecter à SQL via python pour exécuter des requêtes sur certaines bases de données SQL sur Microsoft SQL server. D'après mes recherches en ligne et sur ce forum, la bibliothèque la plus prometteuse semble être pyodbc. Donc j'ai fait le code suivant
import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+;
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()
et obtenir l'erreur suivante
Traceback (most recent call last):
File "C:Users...scrap.py", line 3, in <module>
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
j'ai regardé les postes suivants et j'ai essayé de changer mon pilote en {sql server} et je me suis connecté en utilisant des liens ODBC auparavant dans SAS, ce qui est en partie ce sur quoi mon code ci-dessus est basé, donc ne pensez pas que j'ai besoin d'installer quoi que ce soit d'autre.
pyodbc.Erreur: ('IM002', ' [IM002] [unixODBC][Driver Manager]nom de la source de données introuvable, et aucun pilote par défaut spécifié (0) (SQLDriverConnect)')
Pyodbc -" nom de la source de données introuvable, et aucun pilote par défaut spécifié"
Merci
7 réponses
C'est comme ça que je le fais...
import pyodbc
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=server_name;"
"Database=db_name;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Table')
for row in cursor:
print('row = %r' % (row,))
sources pertinentes:
ajout mineur à ce qui a été dit auparavant. Vous voulez probablement retourner une base de données. Cela se ferait comme
import pypyodbc
import pandas as pd
cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=server_name;"
"Database=db_name;"
"uid=User;pwd=password")
df = pd.read_sql_query('select * from table', cnxn)
dans les connexions source de données entre un client et un serveur, il y a deux types généraux: ODBC qui utilise un pilote et OLEDB qui utilise un fournisseur. Et dans le monde de la programmation, c'est un débat régulier quant à la route à suivre pour se connecter aux sources de données.
vous utilisez un fournisseur, SQLOLEDB
, mais en le spécifiant comme pilote. Pour autant que je sache, ni les modules pyodbc ni les modules pypyodbc ne prennent en charge les connexions OLEDB des fenêtres. Cependant, l' adodbapi ne qui utilise le Microsoft ADO comme un composant sous-jacent.
ci-dessous sont les deux approches pour vos paramètres de connexion. En outre, I format de chaîne de caractères vos variables comme votre concaténation n'ont pas correctement briser les guillemets dans la chaîne de caractères. Vous remarquerez que je double les accolades car il est nécessaire dans la chaîne de connexion et string.format()
l'utilise également.
# PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
# DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \
trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
je préfère de cette façon ... c'était beaucoup plus facile
http://www.pymssql.org/en/stable/pymssql_examples.html
conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA")
cursor = conn.cursor()
cursor.execute('SELECT * FROM usuario')
une autre approche serait installation pilote Microsoft ODBC 13, puis remplacer SQLOLEDB
par ODBC Driver 13 for SQL Server
Cordialement.
essayez d'utiliser pytds, cela fonctionne dans un environnement plus complexe que pyodbc
et plus facile à configurer.
je l'ai fait travailler sur Ubuntu 18.04
exemple de code dans la documentation:
import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
with conn.cursor() as cur:
cur.execute("select 1")
cur.fetchall()