Получить значение из таблицы SQLITE и использовать для запроса другой таблицы - PullRequest
0 голосов
/ 24 апреля 2019

Я извлекаю значение из таблицы SQLITE, а затем использую это значение для извлечения данных из другой таблицы, используя инструкцию SELECT FROM WHERE.Я не могу использовать полученное значение для запроса другой таблицы, даже если значения совпадают, когда я получаю это значение независимо от запрашиваемой таблицы.Я получаю параметр привязки ошибки 0 - возможно, неподдерживаемый тип.Я передаю правильное значение из того, что прочитал в документах, но, очевидно, что-то не так.

Редактировать: Конечная цель состоит в том, чтобы затем выбрать Name и EndTimeвставьте значение EndTime в другую таблицу в том же БД, если значение столбца = имя в этой таблице.Ниже добавлен код обновления, который дает представление о том, чего я пытаюсь достичь.

Когда я печатаю nameItem, кажется, что это строка в кодировке Unicode, (u'Something ') - то, как она выглядит.Я не знаю, является ли это проблемой кодирования, но я использовал подобные запросы раньше и не сталкивался с этой проблемой.

Я пытался использовать текст, который я ищу, непосредственно в запросе SELECT, и этоработает, но при передаче его в качестве переменной я по-прежнему получаю неподдерживаемый тип.

c.execute('SELECT Name FROM Expected WHERE Timing = 1')
timeList = c.fetchall()
for i in range(len(timeList)):
    nameItem = timeList[i]
    c.execute('SELECT "EndTime" FROM Expected WHERE "Name" = ?', (nameItem,))
    end = c.fetchone()
    conn = sqlite3.connect(otherDb)
    c = conn.cursor()
    c.execute('UPDATE Individuals SET Ending = end WHERE NAME = NameItem')

Я ожидаю, что это извлечет время, связанное с текущим значением nameItem.

1 Ответ

0 голосов
/ 24 апреля 2019

Первое исправление, которое нужно попробовать, это использовать строку вместо кортежа (примечание timeList - список кортежей):

nameItem = timeList[i][0]

Но лучше не использовать len, что-то вроде:

c.execute('SELECT Name FROM Expected WHERE Timing = 1')
timeList = c.fetchall()
for elem in timeList:
    nameItem = elem[0]
    c.execute('SELECT "EndTime" FROM Expected WHERE "Name" = ?', (nameItem,))
    end = c.fetchone()

И еще лучше выбрать EndTime в первом запросе (выглядит приемлемым в данном контексте):

c.execute('SELECT Name, EndTime FROM Expected WHERE Timing = 1')
timeList = c.fetchall()
for elem in timeList:
    name = elem[0]
    end_time = elem[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...