从Essential SQL Alchemy第2版本书中我采用了这个例子:
def get_orders_by_customer(cust_name):
columns = [orders.c.order_id, users.c.username, users.c.phone,
cookies.c.cookie_name, line_items.c.quantity,
line_items.c.extended_cost]
cust_orders = select(columns)
cust_orders = cust_orders.select_from(
users.join(orders).join(line_items).join(cookies))
cust_orders = cust_orders.where(users.c.username == "cakeeater")
result = connection.execute(cust_orders).fetchall()
return result
get_orders_by_customer("cakeeater")
但是,当我查看生成的原始SQL时,它看起来像这样:
SELECT orders.order_id, users.username, users.phone, cookies.cookie_name, line_items.quantity, line_items.extended_cost
FROM users JOIN orders ON users.user_id = orders.user_id JOIN line_items ON orders.order_id = line_items.order_id JOIN cookies ON cookies.cookie_id = line_items.cookie_id
WHERE users.username = :username_1
现在有趣的是,{而不是"cakeeater"
SQL显示:username_1
作为逻辑结果,查询不返回任何值。
我使用的数据库是Postgres Python版本3.4.3 SQLAlchemy版本1.0.12
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
是sqlalchemy日志记录格式。 ":USERNAME_1"将由您的变量替换。 尝试运行
SELECT orders.order_id,
users.username,
users.phone,
cookies.cookie_name,
line_items.quantity,
line_items.extended_cost
FROM users
JOIN orders ON users.user_id = orders.user_id
JOIN line_items ON orders.order_id = line_items.order_id
JOIN cookies ON cookies.cookie_id = line_items.cookie_id
WHERE users.username = 'cakeeater';
在你的psql控制台上,也许你会得到一个空的结果。
PS:检查你的sql。尝试将join
替换为outerjoin