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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

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

Q&A

解決済

2回答

5500閲覧

if文 判定の書き方が分からない

threeeverytwo

総合スコア49

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

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

0グッド

1クリップ

投稿2018/04/29 09:39

前提・実現したいこと

データベース userInfo.db には、

table users(id int, userName)があり、

中身は、(1, "aaaaa")です。

そして、以下のコードのとき、
ユーザ名が、
"aaaaa"のときDBに登録されているので"OK"に、
"bbbbb"のときDBに登録されていないので"NO"になるようにしたいです。

python

1import sqlite3 2 3con = sqlite3.connect("userInfo.db") 4 5cur = con.cursor() 6 7userName1 = "aaaaa" 8userName2 = "bbbbb" 9 10cur.execute("select * form users where = %s" % userName1) 11tuple1 = cur.fetchone() 12 13cur.execute("select * form users where = %s" % userName2) 14tuple2 = cur.fetchone() 15 16if """この部分の判定の書き方が分からない""": 17 print("OK") 18else: 19 print("NO")

しかし、
if文の判定をどのように書けばよいか、分からないです。
とりあえず、type(), isinstance()のどちらかを使えばよさそうなのは、
分かったのですが、userName2 のときのtuple2 の class が NoneType なので、どのように対処すればよいかわかりません。

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

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

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

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

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

guest

回答2

0

解決済みみたいですが、NoneTypeかどうかを判定したい場合はis Noneを使えば可能です。

Python

1if tuple2 is not None: 2 print("OK") 3else: 4 print("NO")

以下はサンプルコードです、ご参考まで。

Python

1# -*- coding: utf-8 -*- 2from contextlib import closing 3import sqlite3 4 5 6def is_exists(one_row: tuple) ->bool: 7 # ブール演算子 and, or, notはショートカットサーキット演算子です。 8 # https://docs.python.jp/3/reference/expressions.html#boolean-operations 9 return one_row is not None and len(one_row) != 0 10 11 12def main() ->None: 13 # データベースのclose忘れを防ぐために、contextlib#closingを使用 14 with closing(sqlite3.connect("userInfo.db")) as con: 15 # 実行SQLをprint文で出力 16 con.set_trace_callback(print) 17 cur = con.cursor() 18 19 userName1 = "aaaaa" 20 userName2 = "bbbbb" 21 # 1,SQLインジェクションを防止するために、bindパラメータを使用 22 # 2,SQLの実行エラー対応 2-1,form→from、2-2,whereで列名を指定 23 # 3,ORDER BY句を指定して、結果の並び順を保証するように変更 24 cur.execute('select * from users where userName =? order by id', (userName1,)) 25 tuple1 = cur.fetchone() 26 27 cur.execute('select * from users where userName =? order by id', (userName2,)) 28 tuple2 = cur.fetchone() 29 30 if is_exists(tuple2): 31 print("OK") 32 else: 33 print("NO") 34 35 36if __name__ == "__main__": 37 main() 38

投稿2018/04/29 11:24

umyu

総合スコア5846

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

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

threeeverytwo

2018/04/29 12:34

適切な情報をありがとうございます。
guest

0

自己解決

if 文を使わず、try文を使用すればうまくいった。
ユーザ名が"bbbbb"のときは、型がNoneTypeで、type()を使っても型のエラーがでるので、エラーが出たときにも、処理ができるように

try:
処理
except TypeError:
処理

というふうに、書けばよい。

TypeErrorの部分を、エラーによって変えれば、例外処理が行える。

投稿2018/04/29 10:30

threeeverytwo

総合スコア49

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問