Выберите данные из JSON вывода для оператора вставки в Python - PullRequest
0 голосов
/ 17 апреля 2020

Предположим, у меня есть JSON как это:

[
 {
  "randomcol" : "randomvarchar"
 }
]

И он генерируется так:

cursor_orcl.execute("""
                    Select * from test_t where 
            """)

rows = cursor_orcl.fetchall()
columns = [desc[0] for desc in cursor_orcl.description]
result = []

for row in rows:
    row = dict(zip(columns, row))
    result.append(row) 

Мне нужно сгенерировать оператор вставки SQL в Python из этого. Я придумал следующее:

...
cursor_insert = cnxn.cursor()
cursor_insert.arraysize= 50000
sql = (
    "INSERT INTO dbo.test_t (randomcol) " + " VALUES("
    "SELECT randomcol" +
    "FROM OPENJSON(?))"
      )

cursor_insert.execute(sql)   
cursor_insert.close ()
cnxn.commit ()

Однако он выдает мне эту ошибку: 'pyodb c .Error: (' 07002 '.' [07002] '[Microsoft] [ODB C Драйвер 17 для SQL Сервер] Поле COUNT неверно или синтаксическая ошибка (0) (SQLExecDirectW) ')'

Что может быть не так? Это просто тестовая таблица только с 1 строкой / столбцом, я не понимаю, почему она не работает.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Вы можете загрузить в JSON строки как словари для Python.

import json
yourdict = json.loads({"randomcol":"randomstring"})

После этого вы можете работать с ним, как с любым обычным python словарем.

0 голосов
/ 17 апреля 2020

Начиная с Oracle, синтаксис, который вы использовали, недействителен; удалить ключевое слово values.

insert into test_t (randomcol) values (select randomcol from openjson)
                               ------
                               remove it!

Скобки также можно удалить, так что, наконец, вы получите

insert into test_t (randomcol) select randomcol from openjson
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...