Я попытался создать простой код, который выдает данные sh от excel
до sql и создать таблицы на основе Data-Frames
в виде приведенного ниже кода
import pyodbc
import pandas as pd
import os
import sqlalchemy as db
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Date, Float
import datetime as dt
# Create a ditionary for gsm datafeed relation excel file
hua_gsm_dataf_relations_col_dict = {
'cell_name': 'Cellname',
'n_cell_name': 'Ncellname',
'technology': 'Technology',
}
# Create a list for hua_gsm_dataf_relations_cols and put the dictionary in the list
hua_gsm_dataf_relations_cols = list(hua_gsm_dataf_relations_col_dict.keys())
# connect db
engine = create_engine('mssql+pyodbc://xxxxxxxxxx\SMARTRNO_EXPRESS/myDB?driver=SQL+Server+Native+Client+11.0')
connection = engine.connect()
hua_gsm_dataf_relations_cols_meta = MetaData()
hua_gsm_dataf_relations = Table(
HUA_GSM_DF_RELATIONS, hua_gsm_dataf_relations_cols_meta,
Column('id', Integer, primary_key=True),
Column(hua_gsm_dataf_relations_cols[0], Integer),
Column(hua_gsm_dataf_relations_cols[1], Integer),
Column(hua_gsm_dataf_relations_cols[2], String),
)
if engine.dialect.has_table(engine, HUA_GSM_DF_RELATIONS):
hua_gsm_dataf_relations.drop(engine)
hua_gsm_dataf_relations_cols_meta.create_all(engine)
#This part is converting the `txt` to `csv`
hua_gsm_dataf_rel_txt = 'gsmrelation_mnm.txt'
dataf_gsm_txt_df = pd.read_csv(hua_gsm_dataf_rel_txt, sep=';')
hua_gsm_dataf_rel_df_column_index = list(dataf_gsm_txt_df.columns)
dataf_gsm_txt_df.reset_index(inplace=True)
dataf_gsm_txt_df.drop(columns=dataf_gsm_txt_df.columns[-1], inplace=True)
hua_gsm_dataf_rel_df_column_index = dict(zip(list(dataf_gsm_txt_df.columns), hua_gsm_dataf_rel_df_column_index))
dataf_gsm_txt_df.rename(columns=hua_gsm_dataf_rel_df_column_index, inplace=True)
dataf_gsm_txt_df.to_excel('gsmrelation_mnm.xlsx', 'Sheet1', index=False)
hua_gsm_dataf_rel_excel = 'gsmrelation_mnm.xlsx'
hua_gsm_dataf_rel_df = pd.read_excel(os.path.join(os.path.dirname(__file__), hua_gsm_dataf_rel_excel), dtype={
hua_gsm_dataf_relations_col_dict[hua_gsm_dataf_relations_cols[0]]: int,
hua_gsm_dataf_relations_col_dict[hua_gsm_dataf_relations_cols[1]]: int,
hua_gsm_dataf_relations_col_dict[hua_gsm_dataf_relations_cols[2]]: str,
})
hua_gsm_rel_df['Neighbor Cell Name'].replace(regex=True, inplace=True, to_replace=r'\D', value=r'')
hua_gsm_dataf_relations_table_query = db.insert(hua_gsm_dataf_relations)
hua_gsm_dataf_relations_values_list = []
hua_gsm_dataf_relations_row_count = 1
for i in hua_gsm_dataf_rel_df.index:
hua_gsm_dataf_relations_row = hua_gsm_dataf_rel_df.loc[i]
hua_gsm_dataf_rel_df_record = {'id': hua_gsm_dataf_relations_row_count}
for col in hua_gsm_dataf_relations_col_dict.keys():
if col == hua_gsm_dataf_relations_cols[0] or col == hua_gsm_dataf_relations_cols[1]:
hua_gsm_dataf_rel_df_record[col] = int(hua_gsm_dataf_relations_row[hua_gsm_dataf_relations_col_dict[col]])
else:
hua_gsm_dataf_rel_df_record[col] = hua_gsm_dataf_relations_row[hua_gsm_dataf_relations_col_dict[col]]
hua_gsm_dataf_relations_values_list.append(hua_gsm_dataf_rel_df_record)
hua_gsm_dataf_relations_row_count += 1
ResultProxy_hua_gsm_dataf_relations = engine.execute(hua_gsm_dataf_relations_table_query,
hua_gsm_dataf_relations_values_list)
connection.close()
engine.dispose()
, и это мой функция конкатенации:
hua_gsm_rel_key_df = hua_gsm_rel_df['Source Cell Name'].map(str) + '_' + hua_gsm_rel_df['Neighbor Cell Name'].map(str)
Итак, все, что мне нужно, я хочу создать еще один столбец в data_base
при переносе данных из csv
в sql
на основе этой функции конкатенации с именем столбца под названием key
У кого-нибудь есть идеи по этому поводу?
Я полагаю, что я мог бы сделать это с помощью sql запроса или чего-нибудь после отправки данных?
Надеюсь, кто-нибудь поможет мне с этим