У меня есть таблица метаданных Sqllite, которая выглядит следующим образом:
table_name | field_name | data_type
account field1 string
account field2 string
account field3 string
asset field4 integer
asset field5 integer
book field6 string
book field7 string
Я хочу динамически создавать схемы для каждой таблицы. Поэтому, используя метаданные выше, автоматически создайте схемы для учетной записи, актива и книги, которые включают в себя их соответствующие поля и тип данных:
Я пытаюсь собрать поля из таблицы метаданных, запросить их, а затем вставить значения в список, как это, например, для имени таблицы учетной записи:
columns = [' field1 string', 'field2 string', 'field3 string'] # and so on
, чтобы я мог объединить их вместе, чтобы создать полный оператор создания таблицы, например:
create_sql = 'CREATE TABLE {} (' + ', '.join(columns) + ');'.format(object_name)
По существу , это будет выглядеть, например, после запуска сценария и создания первого имени таблицы-Account:
create_sql = 'CREATE TABLE account (field1 string, field2 string, field3 string);'
Вот мой код Python:
def get_sf_metadata():
#Tables I want to be dynamiclly created
table_names=['account','asset', 'book']
#SQLIte Connection
conn = sqlite3.connect('example.db')
c = conn.cursor()
#select the metadata table records
c.execute('select table_name,field_name, data_type from master_metadata)
query_result = [ dict(line) for line in [zip([ column[0] for column in c.description], row) for row in c.fetchall()] ]
for record in query_result:
for table in table_names:
if table == record['table_name']:
columns=[]
#Get ALL the fields available for one of the tables and then put all of its fields and data type values in a list
field_data_list= [record['field_name'],records['data_type'] ]
field_data_list.append(columns)
create_sql = 'CREATE TABLE {} (' + ', '.join(columns) + ');'.format(table)
c.execute(create_sql)
get_sf_metadata()
Однако таблицы не создаются. Я довольно новичок в этом, поэтому любые идеи или предложения будут высоко оценены.