サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(4)-pymysql

手順としてはこんな感じ

準備

con = pymysql.connect(
        host='接続先のIPアドレス',
        port=ポート番号,
        db='データベース名',
        user='ユーザ名',
        passwd='パスワード',
        charset='utf8mb4')
cur = con.cursor()

connectメソッドとcursorメソッドを順番に実行。connectメソッドのcharsetはMySQL(or MariaDB)の設定に応じて適宜変更する。

SELECT

if cur.execute('SELECT ~')!=0:
  result = cur.fetchall()

まずexecuteしてfetchall。executeメソッドの返り値はヒットしたレコード数。resultは通常二次元のタプル。ヒットしたレコードが0の時は(一次元の)空タプル。一つのレコードだけ取り出したいときは下記のようにfetchoneメソッドを使う。

cur.execute('SELECT ~')
count = 1
result = []
while True:
  row = cur.fetchone()
  if row is None:
    break
  elif count % 2 == 1:
    result.append(row)
  count += 1

上記のソースの場合、奇数番目のレコードのみをresultリストに追加している。fetchmany(size=1)という複数(引数sizeで行数を指定)のレコードを取り出すメソッドもある。

INSERT、UPDATE、DELETE

cur.execute('INSERT INTO~')
con.commit()

executeし、次いでコネクションのcommitメソッドを使ってDBに反映させる。

DB切断

cur.close()
con.close()

(2015/3/22追記)

SQLインジェクションを避けるためプレースホルダを使う方がよさそう。つまり、

cur.execute('SELECT * FROM table1 WHERE col1 = %s AND col2 = %s',
  (var1, var2))

みたいに、executeメソッドに二つパラメータを指定する。一番目のパラメータにはSQL文を書く。この時フォームから入力されうるものは%sとしておき、二番目のパラメータで%sに置き換える文字列群をタプルとして記述する。%sはシングルクウォートでくくる必要は無い。で、変数var1やvar2にシングルクウォートが含まれていても自動的にエスケープしてMariaDBに渡してくれるようだ。

(2015/8/2追記)

%sに与える値(上記例でのvar1やvar2)は文字列である必要はなく、intやfloat、あるいはdateやdatetime型でも大丈夫。いちいち型変換しなくて済むので便利。

コメント(0)


Blog category: Ultima | Adventure games | BSD and Linux | FM TOWNS and Japanese home computers | Computers | Bottle | 広島新球場 | 日本プロ野球 | 広島市民球場跡地とサッカースタジアム | その他スポーツ | Other topics
2002 08 09 10 11 12
2003 01 02 03
2004 01 02 03 04 06 08 09 10 11 12
2005 01 02 03 04 05 06 07 08 09 10 11 12
2006 01 02 03 04 05 06 07 08 09 10 11 12
2007 01 02 03 04 05 06 07 08 09 10 11 12
2008 01 02 03 04 05 06 07 08 09 10 11 12
2009 01 02 04 05 06 07 09 10
2010 01 03 04 05 08 11
2011 01 02 03 04 07 11 12
2012 01 02 03 09 10 11
2013 01 02 03 05 06 07 08 09 10 11 12
2014 01 02 03 04 05 06 07 10 11 12
2015 01 02 03 04 05 07 08 11 12
2016 03 04 05 07 08 09 10 11
2017 06
2018 11 12
2019 01 04 10
2020 05 06 07

Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。