Я начинаю с SQLAlchemy и пытаюсь получить свою последнюю вставку (твит), но я получаю только SQL-запрос:
conf = readConf("../utils/conf.yaml")
schema = conf['bdd']['type'] + '://' + conf['bdd']['user'] + ':' + conf['bdd']['password'] + '@' + conf['bdd']['host'] + '/' + conf['bdd']['db'] + '?charset=utf8'
engine = create_engine(schema, echo=True)
Base = getBase()
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
tq = session.query(Tweet).group_by(Tweet.tweet_id_uniq).filter(func.max(Tweet.tweet_id_uniq) == Tweet.tweet_id_uniq)
# tweet_id_uniq is a BIGINT autoincrement, so the highest value is the last Tweet.
print tq
Результатом печати является запрос SQL (для удобства чтения):
SELECT tweets.tweet_id AS tweets_tweet_id,
tweets.tweet_id_uniq AS tweets_tweet_id_uniq,
tweets.user_id AS tweets_user_id,
tweets.user_id_uniq AS tweets_user_id_uniq,
tweets.tweet_text AS tweets_tweet_text,
tweets.created_at AS tweets_created_at,
tweets.in_reply_to AS tweets_in_reply_to,
tweets.geo_lat AS tweets_geo_lat,
tweets.geo_long AS tweets_geo_long,
tweets.screen_name AS tweets_screen_name,
tweets.name AS tweets_name,
tweets.profile_image_url AS tweets_profile_image_url,
tweets.source AS tweets_source
FROM tweets
WHERE max(tweets.tweet_id_uniq) = tweets.tweet_id_uniq
GROUP BY tweets.tweet_id_uniq
Почему я не могу получить твит?
РЕДАКТИРОВАТЬ: Если я добавлю .one () или .fisrt () или .all (), я получу эту ошибку:
2012-01-31 16:05:37,644 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2012-01-31 16:05:37,645 INFO sqlalchemy.engine.base.Engine SELECT tweets.tweet_id AS tweets_tweet_id, tweets.tweet_id_uniq AS tweets_tweet_id_uniq, tweets.user_id AS tweets_user_id, tweets.user_id_uniq AS tweets_user_id_uniq, tweets.tweet_text AS tweets_tweet_text, tweets.created_at AS tweets_created_at, tweets.in_reply_to AS tweets_in_reply_to, tweets.geo_lat AS tweets_geo_lat, tweets.geo_long AS tweets_geo_long, tweets.screen_name AS tweets_screen_name, tweets.name AS tweets_name, tweets.profile_image_url AS tweets_profile_image_url, tweets.source AS tweets_source
FROM tweets
WHERE max(tweets.tweet_id_uniq) = tweets.tweet_id_uniq
2012-01-31 16:05:37,645 INFO sqlalchemy.engine.base.Engine ()
...
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.7.3-py2.6-linux-i686.egg/sqlalchemy/engine/default.py", line 330, in do_execute
cursor.execute(statement, parameters)
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1111, 'Invalid use of group function') 'SELECT tweets.tweet_id AS tweets_tweet_id, tweets.tweet_id_uniq AS tweets_tweet_id_uniq, tweets.user_id AS tweets_user_id, tweets.user_id_uniq AS tweets_user_id_uniq, tweets.tweet_text AS tweets_tweet_text, tweets.created_at AS tweets_created_at, tweets.in_reply_to AS tweets_in_reply_to, tweets.geo_lat AS tweets_geo_lat, tweets.geo_long AS tweets_geo_long, tweets.screen_name AS tweets_screen_name, tweets.name AS tweets_name, tweets.profile_image_url AS tweets_profile_image_url, tweets.source AS tweets_source \nFROM tweets \nWHERE max(tweets.tweet_id_uniq) = tweets.tweet_id_uniq GROUP BY tweets.tweet_id_uniq' ()