Функция Python / SQLite для обновления таблицы базы данных из XLS без определенной схемы - PullRequest
0 голосов
/ 06 февраля 2019

Я работаю с базой данных, где схема и таблицы были определены в другом месте, и я заполняю некоторые поля некоторых таблиц данными из CSV или XLS.

Pandas.DataFrame.to_sql может только потерпеть неудачу, заменитьили добавить к существующей таблице.И если вы используете замену, ваш первичный и внешний ключи будут потеряны ( например ).

Итак, я написал функцию для сопряжения полей в моем XLS с полями в таблице базы данных.Есть лучший способ сделать это?Или более питонический код?(В качестве альтернативы можно рассмотреть SQLAlchemy, но не удалось заставить его работать .)

def pd2sql_replace(db_file, db_table, dataframe):
    """ Insert or replace records in database table based on pandas dataframe """
    import sqlite3

    table_fields = list_fields(db_file, db_table)
    df_fields = list(dataframe)
    common_fields = set(df_fields) & set(table_fields)
    common_fields = list(common_fields)
    conn = sqlite3.connect(db_file)
    cur = conn.cursor()

    fields2 = ', '.join(str(x) for x in common_fields)
    cells = ['?'] * len(common_fields)
    cells = ', '.join(str(x) for x in cells)
    str_sql = 'REPLACE INTO ' + db_table + ' (' + fields2 + ') ' + 'VALUES' + ' (' + cells + ')'
    for row in dataframe.index.values:
        val = ['?'] * len(common_fields)
        for ii in range(len(common_fields)):
            field = common_fields[ii]
            val[ii] = dataframe.loc[row].at[field]
        print val
        cur.executemany(str_sql, (val,))
        del val
    conn.commit()
    conn.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...