Я работаю над созданием базового приложения, которое запрашивает базу данных записей, которые у меня есть, чтобы предложить то, что я должен слушать дальше. Мой текущий проект требует, чтобы пользователь входил в текущий альбом, который они прослушивают, а затем запрашивает базу данных, чтобы вернуть родственный жанр и других художников в этом жанре.Оператор SQLite SELECT не работает в Python
Команды и c.fetchone()
, которые я использую для возвращения художника и жанра дважды. Код не работает, когда я пытаюсь установить reclist = c.fetchall()
.
Худшая часть всего этого заключается в том, что у меня был код, работающий в течение нескольких минут, прежде чем вернуться и поработать несколькими вещами. Наверное, я выучил мой урок о внесении «безобидных» изменений.
схемы для базы данных:
sqlite> .schema
CREATE TABLE album (
id INTEGER PRIMARY KEY,
album TEXT
);
CREATE TABLE genre (
id INTEGER PRIMARY KEY,
genre TEXT
);
CREATE TABLE artist (
id INTEGER PRIMARY KEY,
artist TEXT
);
CREATE TABLE aag (
artist_id INTEGER,
album_id INTEGER,
genre_id INTEGER
);
Полный код Python ниже:
import sqlite3
import sys
conn = sqlite3.connect('aag_database.db')
c = conn.cursor()
print "Are you listening to a record right now?"
uresponse1 = raw_input("[y/N]")
#collect query information from user
if uresponse1 == "N":
sys.exit()
print "What is the name of the record are you listening to?"
uresponse2 = raw_input("> ")
print "Let me see what I know about %r" % (uresponse2)
#query record database
c.execute('''Select artist.artist FROM
artist, album, aag WHERE
artist.id=aag.artist_id AND
album.id=aag.album_id AND
album.album=?''', (uresponse2,))
artist_return = str(c.fetchone())
if artist_return == "None":
print "I guess I don't know anything about that record."
sys.exit()
#confirm match
print "Oh do you mean %r by %r" % (uresponse2, artist_return)
uresponse3 = raw_input("[y/N]")
if uresponse3 == "N":
sys.exit()
#query record database for genre of user input
c.execute('''Select genre.genre FROM
genre, album, aag WHERE
genre.id=aag.genre_id AND
album.id=aag.album_id AND
album=?''', (uresponse2,))
genre_return = str(c.fetchone())
if genre_return == "None":
print "I guess I don't know anything about that genre."
sys.exit()
#confirm match
print "I would classify that album as %r music" % (genre_return)
print "If you like that you may also enjoy these records:"
#query record database on genre
c.execute('''Select artist, album FROM
genre, album, artist, aag WHERE
genre.id=aag.genre_id AND
album.id=aag.album_id AND
artist.id=aag.artist_id AND
genre.genre=?''', (genre_return,))
reclist = c.fetchall()
print reclist
И урок для использования контроля версий, такого как 'git'! – ChrisFreeman
Каково было сообщение об ошибке/stacktrace? – ChrisFreeman
Не было сообщений об ошибке, которые являются частью того, что так расстраивает. Когда я печатаю список, я получаю значение None. Тест, который я использовал, имеет несколько других художников в одном жанре. Чтобы сделать это еще БОЛЕЕ, разочарование окончательный запрос работает, когда я выполняю его в sqlite3. – cmcfetridge