2013-09-29 3 views
0

Вот модели я работаю с:SQL синтаксис фильтра алхимия запрос не работает

class User(db.Model): 
__tablename__ = 'user' 
uid = db.Column(db.Integer, primary_key=True, index=True) 
firstName = db.Column(db.String(100)) 
lastName = db.Column(db.String(100)) 
emailAddress = db.Column(db.String(120), unique=True, index=True) 
pwHash = db.Column(db.String(256)) 
userLevel = db.Column(db.Integer()) 
userAccountType = db.Column(db.Integer()) 
isUserActive = db.Column(db.Boolean()) 
isUserLockedOut = db.Column(db.Boolean()) 
userLastLogin = db.Column(db.DateTime()) 
lastInvalidLogin = db.Column(db.DateTime()) 
userCreatedAt = db.Column(db.DateTime()) 
userConfirmedAt = db.Column(db.DateTime()) 
userUpdatedAt = db.Column(db.DateTime(), onupdate=datetime.datetime.now()) 
userAddress = db.relationship('Address', backref='user', lazy='dynamic') 
userContactMethod = db.relationship('UserContactMethod', backref='user', lazy='dynamic') 
userSensor = db.relationship('Sensor', backref='user', lazy='dynamic') 
userReading = db.relationship('Reading', backref='user', lazy='dynamic') 
deliveryEvents = db.relationship('logSMTPDeliveryEvents', backref='user', lazy='dynamic') 

class Reading(db.Model): 
    __tablename__ = 'reading' 

rid = db.Column(db.Integer, primary_key=True) 
uid = db.Column(db.Integer, db.ForeignKey('user.uid')) 
sid = db.Column(db.Integer, db.ForeignKey('sensor.sid')) 
readingTimestamp = db.Column(db.DateTime()) 
readingLightValue = db.Column(db.Integer) 
readingLightStatus = db.Column(db.String(6)) 
readingTemp1 = db.Column(db.Float) 
readingTemp2 = db.Column(db.Float) 
readingHumidity = db.Column(db.Float) 

Так моя таблица показаний имеет идентификатор пользователя установлен в качестве внешнего ключа в таблице показаний. Теперь, когда я попытаюсь выдать такой запрос:

queryResult = db.session.query(Reading).filter(Reading.uid == User.uid) 

Я получаю все строки, что неверно. Как я должен строить этот запрос?

Спасибо! C

ответ

2

Непонятно, что вы пытаетесь отфильтровать из своего вопроса; Вы пытаетесь найти строки Reading, которые соответствуют определенной строке User?

Предположив у вас есть адрес электронной почты пользователя, и хотите найти Reading «S, которые принадлежат этому пользователю, вам нужно будет построить свой запрос в три этапа:

Во-первых, начните с запросом, возвращает строку из Reading:

q = session.query(Reading) 

Далее расширить запрос, чтобы сказать, что вы хотите следовать user ссылки на атрибуты User.

q = q.join(Reading.user) 

Наконец Отфильтровывать только те строки, которые желаемые User функции. Убедитесь, что вы фильтруете конкретное фактическое значение.

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