質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2961閲覧

PythonのSQLAlchemyでIFNULL()を使いたい

shun-shobon

総合スコア50

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/20 12:11

前提・実現したいこと

SQLAlchemyをもちいて、MySQLサーバーを操作しているのですが、SQLAlchemyにIFNULL()関数が存在しません。
インターネットで調べているとsqlalchemy.sql.functionsにあると書いてあるのですが、インポートしようとしても存在していないというエラーが発生します。SQLAlchemyでIFNULL関数を(ないしはそれに似たもの)はあるのでしょうか?

該当のソースコード

Python

1import datetime 2from sqlalchemy.sql.functions import count, current_date 3 4from .setting import session # セッション情報です。 5from .table import * # テーブルの定義です。 6 7def fetch_books(user_id): 8 not_review_questions = session.query(Question.book_id, count('*').label('count')). \ 9 filter(Question.question_review_date <= current_date()). \ 10 group_by(Question.book_id). \ 11 subquery() 12 questions = session.query(Question.book_id, count('*').label('count')). \ 13 group_by(Question.book_id). \ 14 subquery() 15 16# ここでquestions.c.countとnot_review_questions.c.countにifnull関数を使用する予定でした。 17 books = session.query(Book.id, Book.book_name, questions.c.count, not_review_questions.c.count). \ 18 outerjoin(questions, Book.id == questions.c.book_id). \ 19 outerjoin(not_review_questions, Book.id == not_review_questions.c.book_id). \ 20 filter(Book.user_id == user_id). \ 21 order_by(Book.id).all() 22 23 return books

試したこと

  • sqlalchemy.sql.functionsからifnullをインポートしようとした。(エラー)

補足情報(FW/ツールのバージョンなど)

  • Python 3.7.1
  • SQLAlchemy 1.3.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

functionsではなくfuncから見てあげる必要があるのでは?

sin_250さんの回答の方法で駄目なら、以下のfuncをimportしてみてください。

https://docs.sqlalchemy.org/en/13/core/sqlelement.html?highlight=func#sqlalchemy.sql.expression.func

投稿2019/04/22 01:03

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shun-shobon

2019/04/22 01:21

sqlalchemy.sql.expressionもインターネットの記事を見てインポートしたのですが、やはりifnullは存在していないようです。というか、IDEを用いて、sqlalchemy内にifnullという関数があるか調べましたが、ありませんでした。
hayataka2049

2019/04/22 01:40

from sqlalchemy.sql.expression import func して func.ifnull を試してください。
hayataka2049

2019/04/22 01:41

なんか動的に生成されるっぽいので、IDEの支援だと出てこないと思います。実行時に決まるはずです。
shun-shobon

2019/04/23 03:25

ありがとうございます。実行できました!
guest

0

そこまで詳しいわけではないので見当違いな解答ならすみません。
私の環境では以下のURL同様にしてみたらifnullという名前の関数は存在するようです。
https://stackoverflow.com/questions/31755378/using-ifnull-in-sqlalchemy-core

python

1Python 3.6.7 (default, Dec 29 2018, 21:50:45) 2[GCC 5.4.0 20160609] on linux 3Type "help", "copyright", "credits" or "license" for more information. 4>>> from sqlalchemy.sql import func 5>>> func.ifnull 6<sqlalchemy.sql.functions._FunctionGenerator object at 0x7f3e06d21e10>

投稿2019/04/20 13:43

sin_250

総合スコア112

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shun-shobon

2019/04/21 23:22

そうですか…… 私のバージョンではifnullという関数はどこにも見つかりませんでした。もしかしたらバージョンが違うことによってifnillというのが削除ないしは未実装なのかもしれないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問