web-dev-qa-db-ja.com

Pythonを使用してMicrosoft SQLサーバーに接続する

私はMicrosoft SQL Server上のいくつかのSQLデータベース上でいくつかのクエリを実行するためにPythonを通してSQLに接続しようとしています。私のオンラインでの研究とこのフォーラムでの最も有望な図書館はpyodbcのようです。だから私は次のコードを作りました

import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; 
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()

そして、次のエラーが出ます

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)')

私は以下の記事を見て、私のドライバを{sql server}に変更し、SASで以前にODBCリンクを使って接続したことがあります。他に何かをインストールする必要があります。

pyodbc.Error:( 'IM002'、 '[IM002] [unixODBC] [ドライバマネージャ]データソース名が見つかりません。デフォルトドライバが指定されていません(0)(SQLDriverConnect)')

Pyodbc - "データソース名が見つかりません。デフォルトドライバも指定されていません"

ありがとう

58
Christopher Ell

これが私のやり方です...

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,))

関連ソース:

104
asher

以前に言われたことへのマイナーな追加。おそらくデータフレームを返したいでしょう。これは

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)
37
Keith

クライアントとサーバー間のデータソース接続には、2つの一般的なタイプがあります。DRIVERを使用するODBCとPROVIDERを使用するOLEDBです。プログラミングの世界では、データソースへの接続にどのルートを使用するかについては、 通常の議論 です。

プロバイダSQLOLEDBを使用していますが、それをドライバとして指定しています。私の知る限りでは、pyodbcモジュールもpypyodbcモジュールもWindow OLEDB接続をサポートしていません。ただし、 adodbapi は、基になるコンポーネントとしてMicrosoft ADOを使用します。

以下は、接続パラメータに対する両方のアプローチです。また、I 文字列フォーマット あなたの変数は、連結が文字列内の引用符を適切に分割しなかったために使用します。接続文字列で必要なので中括弧を2倍にし、string.format()でもそれを使用します。

# 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()
27
Parfait

私はこのようにしています...それはずっと簡単でした

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')
12
Franco

これは初心者のためのいくつかの写真です。

enter image description here

2
Andrew

Pytdsを使ってみてください。これはpyodbcよりも複雑な環境でも動作し、セットアップも簡単です。

Ubuntu 18.04で動作させました

参照: https://github.com/denisenkom/pytds

ドキュメント内のサンプルコード:

import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
    with conn.cursor() as cur:
        cur.execute("select 1")
        cur.fetchall()
2
Alfred Huang

以下のPythonコードが私のために働きました。 ODBC接続を確認するために、最初に以下のように4行のC#コンソールアプリケーションを作成しました。

Pythonコード

import pandas as pd
import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;")
df = pd.read_sql_query('select TOP 10 * from dbo.Table WHERE Patient_Key > 1000', cnxn)
df.head()

ストアドプロシージャの呼び出し

 dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )

C#でチェックするプログラムODBC接続

    static void Main(string[] args)
    {
        string connectionString = "Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;";
        OdbcConnection cn = new OdbcConnection(connectionString);
        cn.Open();
        cn.Close();
    }
1
Lijo

代替の方法は、 インストール Microsoft ODBC Driver 13で、その後SQLOLEDBODBC Driver 13 for SQL Serverに置き換えます。

よろしく。

0
mondieki