вставка строки Python sqlite - PullRequest
       1

вставка строки Python sqlite

6 голосов
/ 05 августа 2011

Я пытаюсь вставить строку, полученную в качестве аргумента, в базу данных sqlite, используя python:

    def addUser(self, name):

            cursor=self.conn.cursor()
            t = (name)
            cursor.execute("INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0);", t)
            self.conn.commit()

Я не хочу использовать конкатенацию строк, потому что http://docs.python.org/library/sqlite3.html советует против нее.

Однако, когда я запускаю код, я получаю исключение

cursor.execute("INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0);", t)
pysqlite2.dbapi2.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied

Почему Python разбивает строку по символам, и есть ли способ предотвратить это?

РЕДАКТИРОВАТЬ:

изменение на t = (name,) дает следующее исключение

print "INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0)" + t
exceptions.TypeError: cannot concatenate 'str' and 'tuple' objects

Ответы [ 2 ]

8 голосов
/ 05 августа 2011

Вам нужно это:

t = (name,)

для создания одноэлементного кортежа.

Помните, что запятые составляют кортеж, а не скобки!

1 голос
/ 05 августа 2011

Ваша переменная t не является кортежем, я думаю, что это строка из 7 строк.Чтобы создать кортеж, не забудьте поставить висячую кому:

t = (name,)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...