2017-11-21 26 views
2

私はPythonおよびSQLサーバーを初めて使用しています。私は運のない過去2日間pandas dfをデータベースに挿入しようとしていました。誰でもエラーをデバッグするのを手伝ってください。SQLAlchemyからのSQLサーバーへの接続: "どちらもDSNおよびSERVERキーワードが指定されていません"

私は

sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver]Neither DSN nor SERVER keyword supplied (0) (SQLDriverConnect)') 

は、誰もが私が行方不明です何を教えてもらえます、次のエラーを取得していますがengine.connect()ラインで次のよう

import pyodbc 
from sqlalchemy import create_engine 

engine = create_engine('mssql+pyodbc:///?odbc_connect=DRIVER={SQL Server};SERVER=bidept;DATABASE=BIDB;UID=sdcc\neils;PWD=neil!pass') 
engine.connect() 
df.to_sql(name='[BIDB].[dbo].[Test]',con=engine, if_exists='append') 

を試してみました。私には、Microsoft SQL Server Management Studioを使用しています - 14.0.17177.0

私はまた、私はこのエラーを得ているため、この

import pyodbc 

conn_str = (
    r'Driver={SQL Server Native Client 11.0};' 
    r'Server=bidept;' 
    r'Database=BIDB;' 
    r'Trusted_Connection=yes;' 
    ) 

cnxn = pyodbc.connect(conn_str) 

df.to_sql(name='Test',con=cnxn, if_exists='append') 

を試してみましたが、次

Server type: Database Engine 
Server name: bidept 
Authentication: Windows Authentication 

for which I log into my windows using username : sdcc\neils 
and password : neil!pass 

を通じてSQLサーバーに接続します

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement(s) could not be prepared. (8180)") 

私は何をすべきかわからないので、助力をいただければ幸いです。

答えて

3

SQLAlchemy documentationに記載されているように、パススルー正確なpyodbc文字列を使用する場合は、「区切り文字をURLエスケープする必要があります。

import pyodbc 
from sqlalchemy import create_engine 

params = r'DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb;Trusted_Connection=yes' 
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params) 
engine = create_engine(conn_str) 

ので

、これは失敗します... ...しかし、これは動作します:

import pyodbc 
from sqlalchemy import create_engine 
import urllib 

params = urllib.parse.quote_plus(r'DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb;Trusted_Connection=yes') 
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params) 
engine = create_engine(conn_str) 
+1

は、このは、Python 2.7で動作しませんか? 2.7では、 'AttributeError: 'module'というオブジェクトを解析できません。 'parse''属性はありません。 はPython 3.5で実行できました。 .to_sql()をテストする(最後の5分から実行されていて、そこに止まってしまいました...完了するかどうか心配です) –

+2

Python2では、 'urllib.quote_plus'になります。 –

+0

これはPython 3.5で機能しました。ありがとうございました。定期的にテーブルを更新する方法を見ていきます。私は最後にエラーが発生しましたが、エラー: 'C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ sql.py:1168:UserWarning:テーブル 'Test'が表示されません。おそらく大文字と小文字の区別の問題が原因で、テーブルの作成後にデータベース内に正確にそのように検出されます。小文字のテーブル名の使用を検討してください。 [sdcc \ neils]。[テスト]で、[dbo]ではありません。[テスト] ....誰も私に理由を説明することができます、そして、私は何をすることができますか? [dbo] –

関連する問題