Как запросить таблицу для динамического использования значений из таблицы для создания оператора sql create - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть таблица метаданных 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()

Однако таблицы не создаются. Я довольно новичок в этом, поэтому любые идеи или предложения будут высоко оценены.

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