1

私はsqlite + sqlalchemyを使用しています。これを行っていると、次のようなSQLが得られます。

SELECT task.id as task_id, task.title AS task_title
FROM task
WHERE (SELECT sum(coalesce(intervals."end", CURRENT_TIMESTAMP) - intervals.start) AS sum_1
FROM intervals
WHERE task.id = intervals.task_id) > :param_1

問題は、クエリが実際に次のようになる必要があるため、これが機能しないことです。

...
WHERE (SELECT sum(julianday(coalesce(intervals."end", CURRENT_TIMESTAMP)) - julianday(intervals.start)) AS sum_1
...

しかし、SQLAlchemy で julianday 関数を見つけることができなかったり、クエリを手動で変更する方法を正確に見つけることができませんでした。

sqliteでこれらの値の違いを実際に取得できるように、動作を変更するにはどうすればよいですか?

4

1 に答える 1

1

SQLAlchemy では、すべてのデータベース エンジンにあるすべての関数を明示的に定義する必要はありません。いくつかの標準的なものについて知っていますが、使用でき、SQL のsqlalchemy.func.foobar(arg1, arg2, ...)関数呼び出しに変換されます。foobar(arg1, arg2, ...)変化する

@time_spent.expression
def time_spent(cls):
    return func.coalesce(cls.end, func.current_timestamp()) - cls.start

@time_spent.expression
def time_spent(cls):
    return func.julianday(func.coalesce(cls.end, func.current_timestamp())) - \
           func.julianday(cls.start)

そしてあなたは大丈夫なはずです。juliandayただし、移植性がないため、SQLiteで立ち往生しています。

于 2013-08-09T07:13:29.253 に答える