2016-05-31 7 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)); 

それは辞書をロックする可能性があるように私は1つのコマンドですべての列を追加することをお勧めします短期間の構造物。また、アプリケーションでは実行しないことをお勧めしますが、可能であれば手動で1回実行してください。可能/不可能な場合は、次のようにコードを変更することができます:

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