У меня есть скрипт Python, настроенный для извлечения данных и имен столбцов из базы данных Pervasive PSQL, а затем он создает таблицу и записи в MS SQL. Я создаю фреймы данных для данных и для имен столбцов, а затем переименовываю имена столбцов данных из фрейма даты имени столбца.
Однако, когда таблица создается в MS SQL, имена столбцов отображаются как = ('ColumnName',)
Желаемые имена столбцов не будут иметь ('',) и должны читаться как = ColumnName
Ниже приведен код, который я использую, чтобы добраться сюда. Любая помощь в форматировании имен столбцов, чтобы они не включали эти дополнительные символы, была бы очень полезна!
'''
Start - Pull Table Data
'''
conn = pyodbc.connect(conn_str, autocommit=True)
cursor = conn.cursor()
statement = 'select * from '+db_tbl_name
stRows = cursor.execute(statement)
df_data = pandas.DataFrame((tuple(t) for t in stRows))
df_data = df_data.applymap(str)
'''
End - Pull Table Data
'''
'''
Start - Pull Column Names
'''
conn = pyodbc.connect(conn_str, autocommit=True)
cursor_col = conn.cursor()
statement_col = "select CustomColumnName from "+db_col_tbl_name+" where CustomTableName = '"+db_tbl_name+"' and ODBCOptions > 0 order by FieldNumber"
stRows_col = cursor_col.execute(statement_col)
df_col = pandas.DataFrame((tuple(t) for t in stRows_col))
'''
End - Pull Column Names
'''
'''
Start - Add Column Names to Table data (df_data)
'''
df_data.columns = df_col
'''
End - Add Column Names to Table data (df_data)
'''
'''
Start - Create a sqlalchemy engine
'''
params = urllib.parse.quote_plus("DRIVER = {SQL Server Native Client 11.0};"
"SERVER=Server;"
"DATABASE=DB;"
"UID=UID;"
"PWD=PWD;")
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect = {}".format(params))
'''
End - Create a sqlalchemy engine
'''
'''
Start - Create sql table and rows from sqlalchemy engine
'''
df_data.to_sql(name=db_tbl_name, con=engine, if_exists='replace')
'''
End - Create sql table and rows from sqlalchemy engine
'''
Это сработало для меня и должно решить проблему. Сдача.
df_col = pandas.DataFrame((tuple(t) for t in stRows_col))
к
df_col=[]
for row in stRows_col:
df_col.append(row[0])
Pyodbc будет перемещать полученные данные в объекты pyodbc. type(stRows_col)
даст <class 'pyodbc.Cursor'>
, а row
даст вам <class 'pyodbc.Row'>
. Вы можете получить значение для pyodbc.Row, используя row[0]
Спасибо за помощь и понимание происходящего!
зачем ты это делаешь
df_col = pandas.DataFrame((tuple(t) for t in stRows_col))