Я работаю с базой данных, где схема и таблицы были определены в другом месте, и я заполняю некоторые поля некоторых таблиц данными из 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()