スキップしてメイン コンテンツに移動

投稿

4月, 2019の投稿を表示しています

SQLAlchemyでANDやOR条件を指定する方法

SQLAlchemyでANDやOR条件を指定する方法この記事では、SQLAlchemyのfilter関数で、ANDやORで条件を複数指定する方法について紹介します。AND条件の指定まずは、SQLAlchemyでAND条件を指定する方法を紹介します。
AND条件は、下記の3つの書き方ができます。結果としては同じになるため、好きな使ってください。filter関数を繋げてAND条件を複数指定する書き方for user in session.query(User).\ filter(User.name =='山田').\ filter(User.age >=20)メソッドチェーンでfilter()関数を繋げて書くと、AND条件指定のSQLになります。カンマ区切りでAND条件を複数指定する書き方session.query(User).filter(User.name =='山田', User.age >=20)filter()関数にカンマ区切りで条件を複数指定すると、AND条件指定のSQLになります。and_ モジュールを使用してAND条件を複数指定する書き方from sqlalchemy import and_ query.filter(and_(User.name =='ed', User.fullname =='Ed Jones'))AND条件でこの書き方をすることは、あまりないかも…OR条件の指定続いて、SQLAlchemyでOR条件を指定する方法を紹介します。OR条件の指定は、or_モジュールを用います。
orはPythonの予約語なので、末尾に_(アンダーバー)が付いているのに気をつけてください。from sqlalchemy import or_ query.filter(or_(User.name =='山田', User.name =='鈴木'))さいごに今回は、SQLAlchemyのfilter関数で、ANDやOR条件を指定する方法について紹介してきました。時間が空くと忘れてしまいがちですが、この記事を参考に思い出して貰えたら幸いです。

Jinja2の使い方を紹介。Flask+Jinja2

Jinja2の使い方を紹介。Flask+Jinja2この記事では、FlaskのテンプレートエンジンであるJinja2の使い方について、解説します。Jinja2はPythonのWebサービスでよく用いられるため、覚えておいて損はないです。もしPythonのフレームワークであるDjangoを経験していれば、構文がよく似ているため、すんなりと理解することが出来ると思います。Jinja2とはJinja2は、Python用のテンプレートエンジンの1つ。Pythonの有名なフレームワークである、Djangoのテンプレートエンジンに構文がよく似ています。Jinja2は基本的にHTMLやXML生成に使われるが、どのような文書でも生成できます。(例えばソースコードやMarkdownなど)Jinja2は、Flask内のテンプレートエンジンとして組み込まれています。そのため、Flaskの環境があれば、追加のインスール不要でJinja2が使えます。ちなみにJinja2 は、 「じんじゃ(神社)」 と読むそうです。はじめにFlaskでJinja2を使用する場合は、Jinja2のテンプレートファイルを、templatesディレクトリに作成します。templates以外のフォルダにJinja2のテンプレートを作成しても、Flaskは認識してくれませんのでご注意を。project_root ├── app.py └── templates ├── index.html └── about.html Jinja2の基本的な使い方ほほ公式のままですが、下記がJinja2のテンプレートのサンプルです。<title>{{title}}</title><ul> {% for user in users %} <li><ahref="{{ user.url }}">{{ user.username }}</a></li> {% endfor %} </ul>テンプレート構文Jinja2テンプレートの基本的な構文です。構文説明{% ... %}ステートメント{{ ... }}式{# ... #}コメント# ... ##行ステートメントJinja2にパラメータを渡すrende…

SqlAlchemyで任意の文字列でSQL文を実行する(生SQLの実行)

SqlAlchemyで任意の文字列でSQL文を実行する(生SQLの実行)この記事では、PythonのSqlAlchemyで生のSQL文(任意の文字列のSELECTやINSERT文)を実行する方法を紹介します。SqlAlchemyはPythonのORMで便利です。ただ複雑な結合・集計などがあるSQL(SELECT文)をORMで表現すると、ソースが難解になり、逆に普通にSQLを書いたほうが綺麗になる時があります。今回はそんな時に役立つ、SqlAlchemyで生SQLを実行する方法を紹介します。SELECT文をSqlAlchemyで実行生のSELECT文を、PythonのSqlAlchemyで実行するサンプルコードです。コード見て貰えれば分かりますが、SqlAlchemyは簡単に生SQLを実行できるようになってます。from sqlalchemy.sql import text #(1)生のSELECTを定義 t = text("SELECT * FROM User")#(2)SQL実行for r in db.session.execute(t):#(3)辞書型で取得結果のレコードから値が取得できるprint(r["name"])print(r["address"])解説PythonのSqlAlchemyで生SELECT文を実行するには、(1)の部分のように、text("...")で実行するSQLを定義します。次に(2)の部分で、SqlAlchemyのSession.execute()関数に、(1)で作成したSELECT文を渡して実行します。辞書型のリストで、SQLの検索結果が返ってきます。取得したレコードにアクセスするには、(3)のようにr["カラム名"]で指定します。INSERT/UPDATE/DELETEをSqlAlchemyで実行INSERT/UPDATE/DELETEも、基本的にSELECT文の時と要領はおなじです。以下のコードは、SqlAlchemyで生のINSERT文を実行するサンプルです。from sqlalchemy.sql import text #(1)生のINSERT文を定義 t = text("INSERT INTO User (n…

Python + BeautifulSoup4でWebサイトをスクレイピング

Python + BeautifulSoup4でWebサイトをスクレイピングこの記事では、Python+BeautifulSoupでWebスクレイピングする方法を紹介します。インストール前準備として「Requests」と「BeautifulSoup」をpipでインストールします。pip install requests pip install beautifulsoup4 注意事項Pythonに限らず、Webスクレイピングでは、ルールを守ってスクレイピングしないと、法的に訴えられる事もあるので、ルールを守って開発しましょう。# スクレイピング、クローリングする時の注意点
岡崎市立中央図書館事件(Librahack事件) - Wikipediaサンプルコード以下のサンプルHTMLから、今日の日経平均を取得するのPythonのコードです。<!DOCTYPE html><html><head><metacharset="utf-8"><title>ページタイトル</title></head><body><divclass="today"><h1>今日の日経平均は</h1><p>10,000円</p></div><divclass="yesterday"><h1>昨日の日経平均は</h1><p>9,000円</p></div></body>[Python]import requests from bs4 import BeautifulSoup #スクレイピング対象のURL (今回はローカルサーバのHTMLファイルを対象にする) target_url ="http://127.0.0.1/sample.html"#requestsを使って、GETリクエストを送信 r = requests.get(target_url)#レスポンスのHTMLを解析 soup = BeautifulSoup(r.text,'html.parser')…

FlaskのBlueprint環境下で設定値(config)を取得する

FlaskのBlueprint環境下で設定値(config)を取得するFlaskである程度アプリの規模が大きくなる場合、BlueprintでFlaskアプリを分割します。今回はBlueprintで分割したFlaskアプリから、設定値(config)を取得する方法を紹介します。Blueprintstとは?Flaskでアプリの規模が大きくなってくると、1つのファイル(app. py)に全ての処理(route)を書くと、ソースコードの量が膨大になり、メンテナンスが難しくってきます。Blueprintは、Flaskアプリの処理(route)を複数の.pyファイルに分割して実装するためのものです。以前は、Modulesという機能でも分割できましたが、現在はBlueprintの使用が推奨されています。Blueprintで機能を分割する簡単なサンプルおさらいとして、FlaskのBlueprintで機能を分割した簡単なサンプルコードを見てみましょう。【メインファイル (app. py)】from flask import Flask, Blueprint defcreate_app(): app = Flask(__name__)return app app = create_app()from my_app.views import sub app.register_blueprint(sub.app, url_prefix="/sub")if __name__ =='__main__': app.run()【分割したファイル (sub. py)】from flask import Blueprint, render_template app = Blueprint('sub', __name__) @app.route('/')defindex():return render_template('sub/index.html')Blueprint環境下で設定値(config)を取得メインファイル1つで作る場合、設定値(config)は以下のように取得できました。【メインファイル (app. py)】from flask import Flask ~~中略~~ ap…