我经历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