Как создать столбец конкатенации в одной и той же таблице в базе данных на основе конкатенации двух столбцов, когда данные pu sh в sql - PullRequest
0 голосов
/ 29 января 2020

Я попытался создать простой код, который выдает данные 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 запроса или чего-нибудь после отправки данных?

Надеюсь, кто-нибудь поможет мне с этим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...