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

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

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

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

3回答

3978閲覧

検索結果のレコード数を取得したい

mix715

総合スコア7

SQLite

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2018/01/10 21:54

編集2018/01/11 02:26

###前提・実現したいこと
Python2.7+SQLite3で開発しています。
ウェブ上で入力された値(フィールド名 ID)を元にDB(id_list)を検索し、その結果出たレコード数を取得したいです。
(最終的には取得値を元に条件分岐させたいですが、その前段階で躓いています)

###発生している問題・エラーメッセージ
line189, in add
db.execute(sql)
ValueError: operation parameter must be str or unicode

189行目はdb.execute(sql)です。

###該当のソースコード
@route('/add','GET')

def add():
params={'id':unicode(request.forms.get('id',''),'utf-8'),'submit_type':'はい'}
conn = sqlite3.connect('./db/id_list.db')
db=conn.cursor()
sql=('SELECT count(*) FROM id_list where id=? and used is null', (params['id'],))
db.execute(sql)
result = db.fetchall()
record_max = result[0][0]
print ('結果 ==> ', record_max)

###試したこと
SQLの部分を、以下にしても正しく数値は取れました。
sql='SELECT count(*) FROM id_list and used is null'
しかし、パラメーターを受け取ってそれを入れようとエラーになります。

※一番重要なプログラムが古い物になっていました。失礼しました。
エラーが出ている物に修正しました。

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

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

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

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

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

Zuishin

2018/01/11 00:34

パラメーターを渡してないのにパラメーターのエラーが出たり、そもそも SQL にアンカーがなかったり、文法的に間違っているように見える謎 SQL なら動いたり、謎だらけです。これは実際のソースをコピペしたものですか?
mix715

2018/01/11 02:27

コピーするプログラムが間違っておりました。失礼いたしました。
guest

回答3

0

自己解決

そもそも、IDを取得するページ側にも不備がありました。
回答くださった皆さん、ありがとうございました。
一旦こちらは解決済みとさせていただきます!

投稿2018/01/14 05:01

mix715

総合スコア7

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

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

0

2引数を関数に渡したいとき、2要素のタプルを渡すことはできません。

db.execute('SELECT ...', (params['id'],))

とするか、あえてタプルに問い合わせ情報をまとめたいなら

db.execute(*sql)

とタプルを引数に展開する記述が必要になります。

投稿2018/01/11 03:19

yuba

総合スコア5568

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

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

0

execute関数の第一引数にSQL文字列、第二引数にパラメータのタプルを渡してください。
参考:ValueError: operation parameter must be str or unicode

Python

1sql='SELECT count(*) FROM id_list where id=? and used is null' 2db.execute(sql, (params['id'],))

投稿2018/01/11 02:59

can110

総合スコア38262

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

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

mix715

2018/01/11 12:27

ご回答ありがとうございます。 エラーはなくなりましたが、DBに登録されているかに関わらず結果が0になってしまいます。 どの数値・文字を入れても0になります。 因みにDBは特にデータ型などの指定はしていません。 よろしくお願いします。
can110

2018/01/11 12:31

第三者が検証できる詳細(テーブル構造、テーブルデータ内容、SQL文を含むコード)を提示いただけいると回答できるかもしれません。
mix715

2018/01/11 13:14

ご回答ありがとうございます。 テーブルは以下で作成しました。 CREATE table id_list(id, info_flg, used) データ(id)はHTMLから投入しています。 idリスト表示用のHTML ファイル名:id_list.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body><br> <CENTER><b>ID登録</b></CENTER> <p> <table border="1"> <tr> <th>ID</th> <th>フラグ</th> <th>used</th> <th>削除</th> </tr> %for row in rows: <tr> <td>{{row[0]}}</td> <td>{{row[1]}}</td> <td>{{row[2]}}</td> <td><form action="./delete" method="post"> <input type="hidden" name="id" value="{{row[0]}}"> <input type="submit" value="削除"> </form> </td> </tr> %end </table> <a href="./id_insert">新規作成</a> </body> </html> ===================== id登録用のHTML ファイル名:id_settings.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <form action="{{get('url' , '/id_edit')}}" method="post" enctype="multipart/form-data" name="form2"> <form metod="post" name="form2"> <label>id</label> <input id="id" name="id" type="text"> <label>flg</label> <input id="info_flg" name="info_flg" type="text"><br> <label>used</label> <input id="used" name="used" type="text"><br> <input type="hidden" name = "bfr_id" value="{{get('id','')}}"> <input type="hidden" name = "bfr_info_flg" value="{{get('info_flg','')}}"> <input type="hidden" name = "bfr_used" value="{{get('used','')}}"> <input type="submit" value="{{get('submit_type','')}}" > </form> </body> </html> ================== python側のプログラム(関連部抜粋) @route('/id_insert', 'GET') def id_insert(): return template('./views/id_settings.html', {'url':'./id_insert','submit_type':'登録'}) @route('/id_insert', 'POST') def id_settings(): #POSTで渡されたリクエストパラメータの値を取得 params={'id':unicode(request.forms.get('id',''),'utf-8'), 'info_flg':unicode(request.forms.get('info_flg',''),'utf-8'), 'used':unicode(request.forms.get('used',''),'utf-8'), 'submit_type':'登録'} conn = sqlite3.connect('./db/id_list.db') db=conn.cursor() db.execute('''INSERT INTO id_list (id, info_flg, used ) values (?,?,?) ''', (params['id'], params['info_flg'], params['used'], )) conn.commit() db.close() return redirect('/id_list')
can110

2018/01/12 07:14

> エラーはなくなりましたが、DBに登録されているかに関わらず結果が0になってしまいます。 で行っているはずの、結果を得る処理コード部分(fetchallなどを実行している部分)がないようですが?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問