Использование iteritems () при вставке файла в базу данных sqlite3 - PullRequest
0 голосов
/ 04 апреля 2011

Моя таблица "video_episodes" имеет вид:

CREATE TABLE "video_episodes" (
    "id" integer NOT NULL PRIMARY KEY,
    "dizilink_id" integer NOT NULL REFERENCES "video_dizilink" ("id"),
    "episodename" varchar(50) NOT NULL,
    "episodeurl" varchar(200) NOT NULL);

Я пытаюсь вставить некоторые значения в поле dict:

video_links = {'a': '1', 'b': '2'}
cursor.executemany("""INSERT INTO video_episodes(dizilink_id, episodename, episodeurl) VALUES (?,?,?)""", dizilink_id, video_links.iteritems(),)
TypeError: function takes exactly 2 arguments (3 given)

Без dizilink_id я могу вставить с помощью iteritems (), но не могу понять, как это возможно с дополнительными ключами.

1 Ответ

0 голосов
/ 04 апреля 2011

Это не имеет ничего общего с iteritems.

Как говорится в сообщении об ошибке, executemany (почему вы используете много, а не просто execute?) Принимает два аргумента, а вы передаете три. Параметры оператора SQL являются одним параметром, поэтому их необходимо заключить в кортеж.

cursor.execute("""INSERT INTO video_episodes(dizilink_id, episodename, episodeurl) VALUES (?,?,?)""", (dizilink_id, video_links.iteritems()))

Редактировать после комментария ОК, думаю, я понимаю, что вы пытаетесь сделать сейчас. Вы хотите вставить несколько значений (episodename, episodeurl) для того же значения dizilink_id.

Вы не можете сделать это с executemany. Вам нужно будет запустить несколько команд. Примерно так:

for name, url in video_links.iteritems():
    cursor.execute("INSERT INTO video_episodes(dizilink_id, episodename, episodeurl) "
                   " VALUES (?,?,?)", (dizilink_id, name, url))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...