Соединение двух списков для строки SQL в Python

1

В настоящее время я соединяю два списка вместе в python для создания строки для ввода в базу данных с помощью этого кода:

newDataString = ', '.join("%s=\'%s\'" % t for t in zip(tableColumns,data))

где tableColumns - это список столбцов, а data - список данных, относящихся к столбцам. Я присоединяюсь к ним вместе, чтобы выполнить обновление.

Все работает отлично, за исключением случаев, когда значение в списке данных = Нет

cur.execute("UPDATE "+table+" SET "+str(newDataString)+" FROM "+tempTable+" WHERE "+generatePrimaryKeyMatches(primaryKey, table))
psycopg2.DataError: invalid input syntax for type date: "None"
LINE 1: ...ION RESEARCH & REP', suff='None', hon='None', dob='None', na...

Полагаю, мне нужно, чтобы где-нибудь здесь была инструкция if, чтобы проверить каждое значение в данных, прежде чем я поместил его в соединение, и к нему следует относиться по-разному (т.е. нет), если data = None, но я не могу для жизни меня фигурой это из.

Любая помощь очень ценится.

  • 0
    если это не то, что вы хотите вернуть
  • 0
    Привет Сундар Я хочу вернуть строку, как это было бы в случае выше, но без апострофов вокруг нее. Например: tableColumns = ['name', 'dob'] data = ['roger', None] вернет: name = 'roger', dob = None. Надеюсь, это прояснится.
Теги:
psycopg2

1 ответ

1

Я думаю, это было бы легче, если бы вы разделили его на два шага:

newDataList = []
for t in zip(tableColumns, data):
    if t[1] is not None:
        newDataList.append("{0}=\'{1}\'".format(*t))
    else:
        # ...deal with None
newDataString = ", ".join(newDataList)

Примечание. Я переключил старомодное форматирование % на str.format.

  • 0
    Привет Джон, это выглядит великолепно. Я сделал быстрый тест, и похоже, что это может решить проблему. Я сейчас провожу полный тест, так что пальцы скрещены, это последний кусочек головоломки, который мне нужен ... если так ... Я должен тебе пива. Огромное холодное пиво. Будет держать вас в курсе...
  • 0
    Привет Джон, спасибо тебе большое за это, похоже, решил проблему. Еще один запрос (если вы могли бы ..!) У меня сейчас есть проблемы со строками, в которых есть апострофы, которые рано закрывают данные, например ... data='18221', datadesc='MANUFACTURE OF OTHER MEN'S OUTERWEA... , есть идеи, как я мог бы включить str.replace в эту функцию, чтобы удалить все апострофы из строк данных перед записью в newDataString? Лучше всего, Джо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню