Итак, у вас есть словарь словарей, который вы хотите преобразовать в таблицу SQL.
Шаги, которые я бы предпринял
- Найдите нужные вам столбцы.
- Создать схему таблицы.
- Цикл в каждом ряду.
- Скомпилируйте набор значений для каждого столбца.
- Вставьте.
Итак:
import sqlite3
con = sqlite3.connect('simple.db')
c = con.cursor()
dic = {
'x1':{'y1':1.0,'y2':0.0},
'x2':{'y1':0.0,'y2':2.0,'y3':1.5},
'x3':{'y2':2.0,'y3':1.5}
}
# 1. Find the unique column names.
columns = set()
for cols in dic.values():
for key in cols:
columns.add(key)
# 2. Create the schema.
col_defs = [
# Start with the column for our key name
'"row_name" VARCHAR(2) NOT NULL PRIMARY KEY'
]
for column in columns:
col_defs.append('"%s" REAL NULL' % column)
schema = "CREATE TABLE simple (%s);" % ",".join(col_defs)
c.execute(schema)
# 3. Loop through each row
for row_name, cols in dic.items():
# Compile the data we have for this row.
col_names = cols.keys()
col_values = [str(val) for val in cols.values()]
# Insert it.
sql = 'INSERT INTO simple ("row_name", "%s") VALUES ("%s", "%s");' % (
'","'.join(col_names),
row_name,
'","'.join(col_values)
)
c.execute(sql)
Тогда остальные ваши вопросы довольно просты:
## update value at a specific row x and column y?
def set_cell(connection, x_name, y_name, value):
sql = 'UPDATE simple SET %s="%s" WHERE row_name="%s"' % (
y_name, value, x_name
)
connection.execute(sql)
## select a value at a specific row x and column y?
def get_cell(connection, x_name, y_name):
sql = 'SELECT %s FROM simple WHERE row_name="%s"' % (
y_name, x_name
)
# Return the first row of results (there should be only one)
# and the first column from that row
return list(connection.execute(sql))[0][0]