我正试图从我的数据库中获取一个表的子集。该数据库是MySql数据库。
Python代码:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, VARCHAR, DATETIME, INT, TEXT, TIMESTAMP
from datetime import datetime
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class TrackablesTable(Base):
__tablename__ = 'Trackables'
trackableId = Column(INT, primary_key=True) #autogenerate
productID = Column(TEXT)
createdOn = Column(TIMESTAMP) #autogenerate
urlTitle = Column(TEXT)
humanTitle = Column(TEXT)
userId = Column(VARCHAR(45))
def __repr__(self):
return "<MyTable(%s)>" % (self.asin)
@staticmethod
def getTrackableByProductId(productID, session):
trackable = session.query(TrackablesTable).filter_by(productID=productID)
return trackable
请注意底部的方法。我期待这种方法能够获得&#34; Trackables&#34;中的所有行。带有&#34; productID&#34;的表格具有productID变量值的列。相反,它似乎返回一个格式错误的查询。
它返回的查询如下:
SELECT "Trackables"."trackableId" AS "Trackables_trackableId", "Trackables"."productID" AS "Trackables_productID", "Trackables"."createdOn" AS "Trackables_createdOn", "Trackables"."urlTitle" AS "Trackables_urlTitle", "Trackables"."humanTitle" AS "Trackables_humanTitle", "Trackables"."userId" AS "Trackables_userId"
FROM "Trackables"
WHERE "Trackables"."productID" = :productID_1
MySQL workbench告诉我查询格式错误。此外,productID查询中的值(&#34;:productID_1&#34;)不是代码中引用的变量的实际值。
答案 0 :(得分:3)
您需要执行查询,而不仅仅是返回它。查询仍然是查询对象,直到在其上调用all()
,first()
或scalar()
等方法,或者迭代它。
您的方法应如下所示:
@staticmethod
def getTrackableByProductId(productID, session):
q = session.query(TrackableTable).filter_by(productID=productID)
return q.first()
当您打印出查询时,SQLAlchemy会使用格式占位符而不是实际值显示查询。实际查询是由SQLAlchemy控件之外的dbapi(例如python-mysql)构建的。
旁注:您的代码(使用staticmethod和命名约定)看起来像是您尝试复制Java类。请考虑阅读PEP8。