0
0 комментариев

Есть следующий код.

Вопрос состоит в том, как оформлять встаку булевских значений (булевские пременные надо заключать в одинарные или двойные кавычки). Сначала я оформлял так же, как и вставляемые строковые значения (выскакивала ошибка наподобие Can't bool to str implicitiy ), но потом я их оформил в представленном виде и у меня засветило красным скобку после ctr2 как invalid syntax. Второй вопрос: почему строкововая переменная «'+j[ctr1]['name']+'» обрамляется в такой набор кавычек. Если есть предложения, как укоротить sql — запросы приму с радостью.

import sys
import json
f=open("D:\\borey.json", "r", encoding="utf-8")
j=json.load(f)
j=j['tables']
import sqlite3 as db
c=db.connect(database="D:\\structuremeta.db")
cur=c.cursor()
cur.execute('''
              SELECT * FROM sqlite_master where name='tmp_fields'
          ''')
 
table_exists = False
 
for i in cur:
 
     if i:
 
         table_exists = True
if not table_exists:
     cur.execute('''CREATE TABLE tmp_fields (
         id              INTEGER DEFAULT ( NULL ),
         table_name     VARCHAR DEFAULT ( NULL ),
         position        INTEGER NOT NULL,
         name            VARCHAR NOT NULL,
         description     VARCHAR DEFAULT ( NULL ),
         domain_name     VARCHAR DEFAULT ( NULL ),
         domain_description         VARCHAR DEFAULT ( NULL ),
         data_type_name VARCHAR NOT NULL,
         length              INTEGER DEFAULT ( NULL ),
         char_length         INTEGER DEFAULT ( NULL ),
         precision           INTEGER DEFAULT ( NULL ),
         scale               INTEGER DEFAULT ( NULL ),
         width               INTEGER DEFAULT ( NULL ),
         align               CHAR    DEFAULT ( NULL ),
         show_null           BOOLEAN DEFAULT ( NULL ),
         show_lead_nulls     BOOLEAN DEFAULT ( NULL ),
         thousands_separator BOOLEAN DEFAULT ( NULL ),
         can_input       BOOLEAN DEFAULT ( NULL ),
         can_edit        BOOLEAN DEFAULT ( NULL ),
         show_in_grid    BOOLEAN DEFAULT ( NULL ),
         show_in_details BOOLEAN DEFAULT ( NULL ),
         is_mean         BOOLEAN DEFAULT ( NULL ),
         autocalculated  BOOLEAN DEFAULT ( NULL ),
         required        BOOLEAN DEFAULT ( NULL ) )''')
for ctr1 in range(len(j)):
    for ctr2 in range(len(j[ctr1]['fields'])):
        for ctr3 in (j[ctr1]['fields'][ctr2]['props']):
            flagcaninput=True if ctr3=='can_input' else False
            flagcanedit=True if ctr3=='can_edit' else False
            flagshowingrid=True if ctr3=='show_in_grid' else False
            flagismean=True if ctr3=='is_mean' else False
            flagautocalculated=True if ctr3=='autocalculated' else False
            flagrequired=True if ctr3=='required' else False
    if j[ctr1]['fields'][ctr2]['type']=='STRING':
        cur.execute('INSERT INTO tmp_fields (table_name, position, name, description, data_type_name, char_length, can_input, can_edit,\
            show_in_grid, is_mean, autocalculated, required) VALUES\
                ("'+j[ctr1]['name']+'", "'+j[ctr1]['fields'][ctr2]['position']+'",\
                    "'+j[ctr1]['fields'][ctr2]['name']+'","'+j[ctr1]['fields'][ctr2]['description']+'",\
                        "'+j[ctr1]['fields'][ctr2]['type']+'", "'+j[ctr1]['fields'][ctr2]['char_length']+'", 'flagcaninput',\
                            'flagcanedit', 'flagshowingrid', 'flagismean', 'flagautocalculated', 'flagrequired')')
    else:
        cur.execute('INSERT INTO tmp_fields (table_name, position, name, description, data_type_name, can_input, can_edit,\
            show_in_grid, is_mean, autocalculated, required) VALUES\
                ("'+j[ctr1]['name']+'", "'+j[ctr1]['fields'][ctr2]['position']+'",\
                    "'+j[ctr1]['fields'][ctr2]['name']+'","'+j[ctr1]['fields'][ctr2]['description']+'",\
                        "'+j[ctr1]['fields'][ctr2]['type']+'", 'flagcaninput',\
                            'flagcanedit', 'flagshowingrid', 'flagismean', 'flagautocalculated', 'flagrequired')')
 
#cur.execute('''DROP TABLE tmp_fields''')
c.commit()
c.close()


Добавить комментарий