hahahalololo
V2EX  ›  问与答

sqlalchemy 查询报错,求大佬们帮忙瞅瞅

By hahahalololo at 2024 年 1 月 10 日 · 1655 次点击
self.AmazonCustomerReturns = Table('amazon_customer_returns', metadata, autoload=True, autoload_with=engine)
session = Session(engine)

result = session.query(self.AmazonCustomerReturns).first()
print(111,result)

result = session.query(self.AmazonCustomerReturns).filter_by(return_date='2024-01-07 00:00:00').all()
print(222, result)

result=session.query(self.AmazonCustomerReturns).filter(self.AmazonCustomerReturns.return_date>='2024-01-07 00:00:00').all()
print(333, result)

前面 2 个都没有问题,这个字段也是有的,执行到第三个的时候报错 AttributeError: 'Table' object has no attribute 'return_date' 求助大佬们瞅瞅。。

4 条回复  •  2024-01-11 11:25:37 +08:00
79lawyer
   1
79lawyer  
   2024 年 1 月 10 日
你这里的 self.AmazonCustomerReturn 是个表,AmazonCustomerReturns.return_date 这种用法是针对于 ORM 映射的,你改成 select([self.AmazonCustomerReturns]).where(self.AmazonCustomerReturns.c. return_date >= '2024-01-07 00:00:00')这种写法试试
79lawyer
   2
79lawyer  
   2024 年 1 月 10 日
我盲猜的哈,我没有用过这种写法,不对不要喷我呜呜呜
stonesirsir
   3
stonesirsir  
   2024 年 1 月 11 日 via Android
我的印象中用反射的话,最好动态将一个表提取成 orm 对象出来,这样对象才带字段属性,你这样是一个 table 对象,本来就没有 return_data 属性?之前用过,不对请指教
hahahalololo
   4
hahahalololo  
OP
   2024 年 1 月 11 日
@xuqiccr @stonesirsir 3q ,后面找到原因了,最后一个忘记写了.c ,改成 self.AmazonCustomerReturns.c.return_date 就行了,眼神不好,一直没有注意到这个点,后面突然发现。
© 2026 V2EX · 26ms · 3.9.8.5