2016-05-31 68 views
2
cnx=sqlalchemy.create_engine("mssql+pyodbc://Omnius:[email protected]:1433/Basis?driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0") 
cnx1 = pyodbc.connect('driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0;server=SRVWUDEN0835;database=Basis;uid=Omnius; pwd=MainBrain1') 
sqlquery = "select top 10 TXN_KEY,SEND_AGENT,PAY_AGENT from Pretty_Txns" 
cursor = cnx1.cursor() 
df = pd.read_sql(sqlquery,cnx) 
model_columns = df.columns.tolist() 
db_columns = cursor.execute("select TXN_KEY,SEND_AGENT from result").fetchall() 
columns = [column[0] for column in cursor.description] 
    to_create =list(set(model_columns) -set(columns)) 
    for c in to_create: 
     a = df[c] 
     sql = DDL('ALTER TABLE %s ADD column %s %s' % (result,a,String(9))) 
     cnx.execute(sql) 

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword 'column'. (156) (SQLExecDirectW)") [SQL: u"ALTER TABLE result ADD column ['API352676', 'AED002782', 'ACB020203', 'ASE094882', 'AII071196', 'AHX012817', 'AED000438', 'AEL051943', 'ADJ031448', 'APM033226'] VARCHAR(9)"] 

上面的代碼顯示瞭如何將新的列在數據庫使用的SQLAlchemy添加到表和pyodbc.For在大多數情況下它工作正常,但在失敗最後一步。添加新列到數據庫表中使用的SQLAlchemy,pyodbc

回答

3

你錯誤地構建了你的alter table ... add column ... SQL。

它應該看起來像如下(單柱):

ALTER TABLE table_name ADD COLUMN column_name data_type(precision); 

或多個列:

ALTER TABLE table_name ADD COLUMN (column1_name data_type(precision), column2_name data_type(precision), column3_name data_type(precision)); 

我會建議添加一個命令所有列,因爲它可能會鎖定詞典結構很短的時間。我還建議你不要在應用程序中這樣做,但如果可能的話,請手動進行一次。如果不可行/可適用,您可以更改您的代碼,如下所示:

'ALTER TABLE {} ADD column ({})'.format(result, ', '.join(['{} {}'.format(c, String(9)) for c in to_create])) 
相關問題