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

36
demandé sur Community 2015-11-16 01:27:50

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:

69
répondu ryguy7272 2017-06-15 16:54:20

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)
24
répondu Keith 2017-03-09 00:13:15

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()
19
répondu Parfait 2017-05-23 12:18:13

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')
6
répondu Franco 2017-12-08 00:50:48

une autre approche serait installation pilote Microsoft ODBC 13, puis remplacer SQLOLEDB par ODBC Driver 13 for SQL Server

Cordialement.

1
répondu mondieki 2017-03-07 17:13:25

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

Ref: https://github.com/denisenkom/pytds

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()
0
répondu Alfred Huang 2018-06-20 01:04:29

Voici quelques photos pour les débutants.

enter image description here

0
répondu Andrew 2018-08-29 23:26:27