как создать скрипт создания таблицы в python

avatar
joe
8 апреля 2018 в 08:18
259
3
1

Я пытаюсь создать таблицу Oracle с помощью Python 3.5. У меня есть имена столбцов и тип данных, хранящиеся в словаре, и я хочу создать оператор SQL (хранящийся в sql_stmt), чтобы выполнить его из Python. Мой словарь выглядит так:

adict1 = {'col1': 'Number', 'col2': 'Date', 'col3': 'Date'}

Я пытаюсь создать оператор SQL, который выглядит следующим образом:

create table dummy(col1 Number, col2 Date, col3 Date)

Итак, я пытался создать оператор SQL, перебирая ключи словаря:

sql_stmt = "create table"

for key in adict1 :
   sql_stmt = sql_stmt + ("dummy('%s' , '%s')" ,(key,adict1[key]))

Но выдает ошибку:

Traceback (most recent call last):
File "<pyshell#413>", line 2, in <module>
sql_stmt = sql_stmt + ("dumm5('%s' , '%s')" ,(key,adict1[key]))
TypeError: must be str, not tuple

Что я сделал не так?

Источник
Aran-Fey
8 апреля 2018 в 08:27
1

Возможный дубликат Как поместить переменную в строку в Python?

Ответы (3)

avatar
Ollie
8 апреля 2018 в 08:36
1

Вам нужно сохранить имя таблицы и открывающую скобку вне цикла, убедитесь, что запятая стоит в нужном месте, используйте {} и .format для форматирования строки с переменными, удалите последнюю запятую, затем добавьте закрывающая скобка.

adict1 = {'col1': 'Number', 'col2': 'Date', 'col3': 'Date'}

sql_stmt = "create table dummy("

for key in adict1 :
   sql_stmt = sql_stmt + ("{} {}, ".format(key,adict1[key]))

sql_stmt = sql_stmt[:-2]
sql_stmt += ")"

Тогда sql_stmt равно "create table dummy(col2 Date, col3 Date, col1 Number)".

avatar
sciroccorics
8 апреля 2018 в 09:18
0

Более питоническое решение:

adict1 = {'col1':'Number', 'col2':'Date', 'col3':'Date'}
sql_stmt = "create table dummy(%s)" % ', '.join(key+' '+val for key,val in adict1.items())

но это может показаться несколько "чрезмерно питоническим"...

avatar
ryanlee
8 апреля 2018 в 08:35
1

возникает ошибка при добавлении строки:

sql_stmt = sql_stmt + ("dumm5('%s' , '%s')" ,(key,adict1[key]))

вы можете отформатировать его следующим образом:

sql_stmt = sql_stmt + 'dumm5({0}, {1})'.format(key, adict1[key])