私は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 - "データソース名が見つかりません。デフォルトドライバも指定されていません"
ありがとう
これが私のやり方です...
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,))
関連ソース:
以前に言われたことへのマイナーな追加。おそらくデータフレームを返したいでしょう。これは
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)
クライアントとサーバー間のデータソース接続には、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()
私はこのようにしています...それはずっと簡単でした
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')
Pytdsを使ってみてください。これはpyodbc
よりも複雑な環境でも動作し、セットアップも簡単です。
Ubuntu 18.04で動作させました
import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
with conn.cursor() as cur:
cur.execute("select 1")
cur.fetchall()
以下の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();
}
代替の方法は、 インストール Microsoft ODBC Driver 13で、その後SQLOLEDB
をODBC Driver 13 for SQL Server
に置き換えます。
よろしく。