Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2016 06:02:43

Vlad_Gergert
Зарегистрирован: 2016-02-12
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите выйти из ступора ПЖЛ

import xml.etree.ElementTree as ET
import sqlite3
conn = sqlite3.connect('trackdb.sqlite')
cur = conn.cursor()
# Make some fresh tables using executescript()
cur.executescript('''
DROP TABLE IF EXISTS Artist;
DROP TABLE IF EXISTS Album;
DROP TABLE IF EXISTS Track;
DROP TABLE IF EXISTS Genre;
CREATE TABLE Artist (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name    TEXT UNIQUE
);
CREATE TABLE Genre (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name    TEXT UNIQUE
);
CREATE TABLE Album (
    id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    artist_id  INTEGER,
    title   TEXT UNIQUE
);
CREATE TABLE Track (
    id  INTEGER NOT NULL PRIMARY KEY 
        AUTOINCREMENT UNIQUE,
    title TEXT  UNIQUE,
    album_id  INTEGER,
    genre_id  INTEGER,
    len INTEGER, rating INTEGER, count INTEGER
);
''')
fname = raw_input('Enter file name: ')
if ( len(fname) < 1 ) : fname = 'Library.xml'
# <key>Track ID</key><integer>369</integer>
# <key>Name</key><string>Another One Bites The Dust</string>
# <key>Artist</key><string>Queen</string>
def lookup(d, key):
    found = False
    for child in d:
        if found : return child.text
        if child.tag == 'key' and child.text == key :
            found = True
    return None
stuff = ET.parse(fname)
all = stuff.findall('dict/dict/dict')
print 'Dict count:', len(all)
for entry in all:
    if ( lookup(entry, 'Track ID') is None ) : continue
    name = lookup(entry, 'Name')
    artist = lookup(entry, 'Artist')
    album = lookup(entry, 'Album')
    count = lookup(entry, 'Play Count')
    rating = lookup(entry, 'Rating')
    length = lookup(entry, 'Total Time')
    genre = lookup(entry, 'Genre')
    if name is None or artist is None or album is None : 
        continue
    print name, artist, album, count, rating, length
    cur.execute('''INSERT OR IGNORE INTO Artist (name) 
        VALUES ( ? )''', ( artist, ) )
    cur.execute('SELECT id FROM Artist WHERE name = ? ', (artist, ))
    artist_id = cur.fetchone()[0]
    cur.execute('''INSERT OR IGNORE INTO Album (title, artist_id) 
        VALUES ( ?, ? )''', ( album, artist_id ) )
    cur.execute('SELECT id FROM Album WHERE title = ? ', (album, ))
    album_id = cur.fetchone()[0]
    
    cur.execute('''INSERT OR IGNORE INTO Genre (name, genre_id) 
        VALUES ( ?, ? )''', ( name, genre_id ) )
    cur.execute('SELECT id FROM Genre WHERE name = ? ', (name, ))
    genre_id = cur.fetchone()[0]
    
    cur.execute('''INSERT OR REPLACE INTO Track
        (title, album_id, len, rating, count, genre ) 
        VALUES ( ?, ?, ?, ?, ? )''', 
        ( name, album_id, length, rating, count, genre ) )
    cur.execute('''SELECT Track.title, Artist.name, Album.title, Genre.name
        FROM Track JOIN Genre JOIN Album JOIN Artist 
        ON Track.genre_id =Genre.ID and Track.album_id = Album.id 
            AND Album.artist_id = Artist.id 
        ORDER BY Artist.name LIMIT 3''')
        
   
    conn.commit()
....................................................................
book@book-eMD728:~/Downloads/tracks$ python tracks.py
Enter file name: 
Dict count: 404
Another One Bites The Dust Queen Greatest Hits 55 100 217103
Traceback (most recent call last):
  File "tracks.py", line 84, in <module>
    VALUES ( ?, ? )''', ( name, genre_id ) )
NameError: name 'genre_id' is not defined

Отредактировано FishHook (Фев. 12, 2016 06:16:01)

Офлайн

#2 Фев. 12, 2016 06:18:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

помогите выйти из ступора ПЖЛ

    # What is genre_id?
    cur.execute('''INSERT OR IGNORE INTO Genre (name, genre_id) 
        VALUES ( ?, ? )''', ( name, genre_id ) )
    # .....
    # Oh, shit, here is it!
    genre_id = cur.fetchone()[0]

Вы СНАЧАЛА используете переменную, а ПОТОМ её объявляете.
Надо как бы наоборот.



Офлайн

#3 Фев. 12, 2016 07:15:34

Vlad_Gergert
Зарегистрирован: 2016-02-12
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите выйти из ступора ПЖЛ

удалил genre_id и код начал работать

СПАСИБО

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version