2017-08-12 13 views
1

dataframe.to_SQLを使用してSQL Server DBにCAPEのパンダを挿入しようとしています。私は行を挿入するために次の解決策を参照しました。 PyOdbc fails to connect to a sql server instanceデータベースエンジンがto_sql関数を使用して挿入しようとしているときにSQL Serverインスタンスに接続できません

ただし、次のようなエラーが表示されます。

ソースコード:

CAPE # Input dataframe 
    connection = pdc.connect('Driver={SQL Server};''Server=GIRSQL.GIRCAPITAL.com;''Database=Tableau;''uid=SQL_User;pwd=Greentableau!') 
    connection_string = urllib.parse.quote_plus(connection) 
    connection_string = "mssql+pyodbc:///?odbc_connect=%s" % connection_string 
    engine = sq.create_engine(connection_string) 
    CAPE.to_sql(engine, name='[Tableau].[dbo].[Company_Table]',if_exists='replace') 

これは私が取得していますエラーです:

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "C:\Users\Abhay\Python36-32\lib\urllib\parse.py", line 803, in quote_plus 
string = quote(string, safe + space, encoding, errors) 
    File "C:\Users\Abhay\Python36-32\lib\urllib\parse.py", line 787, in quote 
return quote_from_bytes(string, safe) 
    File "C:\Users\Abhay\Python36-32\lib\urllib\parse.py", line 812, in quote_from_bytes 
    raise TypeError("quote_from_bytes() expected bytes") 
    TypeError: quote_from_bytes() expected bytes 
    connection = pdc.connect('Driver={SQL Server};''Server=GIRSQL.GIRCAPITAL.com;''Database=Tableau;''uid=SQL_User;pwd=Greentableau!') 
    connection_string = ur.quote(connection) 
    Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "C:\Users\Abhay\Python36-32\lib\urllib\parse.py", line 787, in quote 
return quote_from_bytes(string, safe) 
    File "C:\Users\Abhay\Python36-32\lib\urllib\parse.py", line 812, in 
quote_from_bytes 
    raise TypeError("quote_from_bytes() expected bytes") 
    TypeError: quote_from_bytes() expected bytes 

サンプルデータフレーム値:

 Date Company Value  Category BICS_LEVEL_1_SECTOR_NAME BICS_LEVEL_2_INDUSTRY_GROUP_NAME BICS_LEVEL_3_INDUSTRY_NAME BICS_LEVEL_4_SUB_INDUSTRY_NAME BICS_LEVEL_5_SEGMENT_NAME BICS_REVENUE_LEVEL_ASSIGNED BS_TOT_VAL_OF_SHARES_REPURCHASED COUNTRY COUNTRY_OF_LARGEST_REVENUE EQY_SH_OUT GICS_INDUSTRY_GROUP_NAME  GICS_INDUSTRY_NAME GICS_SECTOR_NAME GICS_SUB_INDUSTRY_NAME  ICB_SECTOR_NAME   INDUSTRY_GROUP INDUSTRY_SECTOR INDUSTRY_SECTOR_NUM  INDUSTRY_SUBGROUP MARKET_SECTOR_DES Real_Earnings Real_Price CAPE_10 Percentile_10_CAPE 
     0 1975-04-30 3M Co  0   EPS    Materials      Chemicals  Specialty Chemicals   Adhesives & Sealants      NaN      10399       3635.82  US    United States 596.767   Capital Goods Industrial Conglomerates  Industrials Industrial Conglomerates General Industrials Miscellaneous Manufactur  Industrial    10011 Diversified Manufact Op   Equity    0   0  NaN     NaN 
     1 1975-04-30 3M Co  0 Stock Price    Materials      Chemicals  Specialty Chemicals   Adhesives & Sealants      NaN      10399       3635.82  US    United States 596.767   Capital Goods Industrial Conglomerates  Industrials Industrial Conglomerates General Industrials Miscellaneous Manufactur  Industrial    10011 Diversified Manufact Op   Equity    0   0  NaN     NaN 
     2 1975-04-30 3M Co  0 Cash Flow    Materials      Chemicals  Specialty Chemicals   Adhesives & Sealants      NaN      10399       3635.82  US    United States 596.767   Capital Goods Industrial Conglomerates  Industrials Industrial Conglomerates General Industrials Miscellaneous Manufactur  Industrial    10011 Diversified Manufact Op   Equity    0   0  NaN     NaN 

答えて

2

DataFrame.to_sql()の最初の位置パラメータはテーブル名です最初のパラメーターとしてengine(SQLAlchemyオブジェクト)を渡しました。

ので、代わりにこれを試してみてください。私はto_sqlを呼び出す前に、 'urllib.parse.quote_plus()' 行でエラーを取得しています

CAPE.to_sql('[Tableau].[dbo].[Company_Table]',con=engine, if_exists='replace') 
+0

。 SQL Serverにデータフレームを挿入するための良い方法はありますか? –

+0

私のコードを次のように変更しました params = urllib.parse.quote_plus( "DRIVER = {SQL Server}; SERVER = GIRSQL.GIRCAPITAL.com; DATABASE = (%= "%s"%params) engine.connect() df.to_sql(name = 'Tablet; UID = SQL_User; PWD = Greentableau! [Tableau]。[dbo]。[テストテーブル] '、con = engine、index = False、if_exists =' append ')' –

関連する問題