2016-05-18 4 views
0

Я начинаю свое приключение с питона и фляжки.Сравнение двух таблиц с использованием flask-sqlalchemy

Я использую колбовую SQLAlchemy для MySQL/MariaDB задачи

class Local(db.Model): 
    __tablename__ = 'local' 
    id = db.Column("VideoLocalID", db.Integer, primary_key=True) 
    file_path = db.Column("FilePath", db.String) 
    hash = db.Column("Hash", db.String) 

class Remote(db.Model): 
    __tablename__ = 'remote' 
    id = db.Column("EpisodeID", db.Integer, primary_key=True) 
    # hash = db.relationship('Local', backref='hash', lazy='dynamic') 
    hash = db.Column("Hash", db.String) 
    #hash = db.relationship(db.String, db.ForeignKey('local.hash')) 
    percentage = db.Column("Percentage", db.Integer) 

Я пытаюсь получить все элементы, которые не делают «хэш» не существует в обеих таблицах. Меня интересуют только те элементы, которые находятся в локальной таблице.

Как вы видите, что я пытался сделать FK работу, но без успеха

localv = Local.query.all() 
remotev = Remote.query.all() 
    for video in localv: 
     for video_remote in remotev: 
      #checking if there is a match if not adding to list 

Я думаю, что мой двойник цикл плохо. Есть ли способ ускорить это или даже сделать это в базе данных вместо локальной?

ответ

0

Наиболее емкий способ сделать это

# get all rows with distinct (unique) hashes from Remote and create a list of hashes. 
remote_hash_list = [item.hash for item in Remote.query.distinct(Remote.hash).all()] 

# Now get all Local items that hash is not in remote hashes list 
local_items = Local.query.filter(Local.hash.notin_(remote_hash_list)).all() 
+1

Сэр, вы сделали мой день. Спасибо, мастер – BigRetroMike

Смежные вопросы