我經歷this SQLAlchemy tutorial,並通過下面的例子顯得非常混亂(約網頁下半部):SQLAlchemy的SELECT混亂
>>> s = select([(users.c.fullname + ", " + addresses.c.email_address).label('title')],
... and_(
... users.c.id==addresses.c.user_id,
... users.c.name.between('m', 'z'),
... or_(
... addresses.c.email_address.like('%@aol.com'),
... addresses.c.email_address.like('%@msn.com')
... )
... )
... )
>>> print conn.execute(s).fetchall()
SELECT users.fullname || ? || addresses.email_address AS title
FROM users, addresses
WHERE users.id = addresses.user_id AND users.name BETWEEN ? AND ? AND
(addresses.email_address LIKE ? OR addresses.email_address LIKE ?)
(', ', 'm', 'z', '%@aol.com', '%@msn.com')
[(u'Wendy Williams, [email protected]',)]
如何(users.c.fullname + ", " + addresses.c.email_address)
標識列選擇from--不說意味着它尋找名爲"fullname, email_address"
的專欄?我顯然是誤解了一些東西。結果[(u'Wendy Williams, [email protected]',)]
是與給予SELECT的字符串相同的格式。我只是不明白這是如何工作的。
以前從未做過數據庫;我在學習SQL的同時學習SQLAlchemy,所以完全有可能我的問題是使用SQL而不使用SQLAlchemy。
是的,所以它似乎翻譯成'SELECT users.fullname || ','|| addresses.email_address AS title ...',它表示'||'是連接運算符。所以這意味着它搜索''fullname,email_address''',對吧?這讓我感到困惑,因爲沒有任何列具有該標題 – 2011-05-29 13:51:53
您將字符串與列混淆在一起。 'users.fullname'不在引號中,所以它是一個列引用,使用'users'表中的'fullname'的值。查看示例底部的返回值:它是來自'fullname'列的值,加上文字的逗號和空格,再加上'email_address'列的值。 – Eevee 2011-05-30 00:59:00
明白了,謝謝 – 2011-05-30 01:19:22