接続
import mysql.connector # ************************************** # 接続 / 更新兼用 # ************************************** cnn = mysql.connector.connect( host='localhost', port=3306, db='lightbox', user='root', passwd='', charset="utf8", autocommit=True) # データベース処理 # ************************************** # 接続解除 # ************************************** cnn.close()
MySQLCursor.fetchone() Methodこのメソッドはクエリ結果セットの次の行を取得し、単一のシーケンスを返し、使用可能な行がない場合はNoneを返します。 デフォルトでは返されたタプルはMySQLサーバから返されたデータで構成され、Pythonオブジェクトに変換されます。(カーソルが生のカーソルの場合そのような変換は行われません : 「cursor.MySQLCursorRawクラス」 ) fetchone メソッドは fetchall および fetchmany によって使用されます。 また、カーソルがイテレータとして使用さる場合にも使用されます。 次の例はカーソルをイテレータとして使用し、内部では fetchone が使用されます。cursor.execute("SELECT * FROM employees") for row in cursor: print(row)関数で処理
# *************************** # 参照 # *************************** def get_data( cnn ): log("get_data") cursor = cnn.cursor(dictionary=True) sql = f"""select 社員コード, 氏名, フリガナ, 所属, 性別, 作成日, 更新日, 給与, 手当, 管理者, DATE_FORMAT(生年月日,'%Y/%m/%d') as 生年月日 from 社員マスタ where 社員コード = '{forms("社員コード")}'""" log(sql) cursor.execute(sql) row = cursor.fetchone() if row is None: set("check_message", "データが存在しません") return False pplog(row) forms("氏名", row["氏名"]) forms("フリガナ", row["フリガナ"]) forms("給与", row["給与"]) forms("生年月日", row["生年月日"]) cursor.close() return True
pplog の結果{'フリガナ': 'ウラオカ トモヤ', '作成日': datetime.datetime(2005, 9, 12, 0, 0), '性別': 0, '所属': '0003', '手当': 9000, '更新日': datetime.datetime(2005, 11, 28, 0, 0), '氏名': '浦岡 友也', '生年月日': '2001/01/10', '社員コード': '0001', '管理者': None, '給与': 80000}MySQLCursor.execute() Methodこのメソッドは指定されたデータベース操作(クエリまたはコマンド)を実行します。 タプルまたはディクショナリ(PHP:連想配列/Ruby:ハッシュ)の値は、SQL文字列内の変数にバインドされます。 変数を%sまたは%(name)s として埋め込んで使用します。 ▼ 例 select_stmt = "SELECT * FROM employees WHERE emp_no = %(emp_no)s" cursor.execute(select_stmt, { 'emp_no': 2 }) ▼ 非推奨 execute は、multiがTrueの場合はイテレータを返します。
Pythonでは、単一の値を含むタプルにカンマを含める必要があります。 たとえば ('abc') はスカラとして評価され、('abc',)はタプルとして評価されます。
print( type(('abc')) ) print( type(('abc',)) ) ▼ 処理結果 <class 'str'> <class 'tuple'>関数で処理
# *************************** # 更新 # *************************** def update_data( cnn ): log("update_data") cursor = cnn.cursor() # 文字列複数行連結 sql = f"""update 社員マスタ set 氏名 = %s, フリガナ=%s, 給与 = %s, 生年月日 = %s where 社員コード = '{forms("社員コード")}'""" log( sql ) try: data = (forms("氏名"), forms("フリガナ"), int(forms("給与")) , forms("生年月日") ) log( data ) cursor.execute(sql, data) except: error_info = str(sys.exc_info()[1]) set("check_message", "更新に失敗しました : " + error_info) log(str(sys.exc_info()[0])) log(error_info) return False cursor.close() return True
sys.exc_info()現在処理中の例外を示す 3 個のタプルを返します。 例外が発生している場合、(type, value, traceback) を返します。type は処理中の例外のクラス(BaseException のサブクラス)を示します。value は例外インスタンス (例外の型のインスタンス) を返します(エラーメッセージはここに格納されています)
▼ エラーメッセージ例(MySQL)1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'aaa' at line 1ログ関数
import pprint # ************************************** # ログ出力 # ************************************** def log( message ): with open('debug.log', 'a') as f: print(message,end='\n',file=f) # ************************************** # ログ出力( pprint ) # ************************************** def pplog( obj ): with open("debug.log", "a") as f: pprint.pprint(obj, stream=f)
|
【Pythonの最新記事】
- Python : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- Python : shift_jis の3列の csv フォーマットのデータを ttk.Treeview に表示する
- Python : ttk.Treeview で表形式を使用して環境変数の一覧表示
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 4 ) : リダイレクトと関数とログ出力
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ
- XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義
- Python + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- Python3 : 言語的デザインの特徴と要点
- Python ドキュメントに沿った、テキストファイル読み込みの理解
- Python3 でメール送信 ( さくらインターネット )
- Python 3.6 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました
- Eclipse + Python(Pydev) : pywin32(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新
- Eclipse + Python(Pydev) : MySQL Connector/Python でループ処理をしながら更新
- Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする
- Python 3.4 : インストールと最初にする事( Windows )
- Python3.x : URL を読み出す( bytes から string )
- Python3.1 : URLを読み出して、バイナリのままファイル出力する
- Python3.1 : クッキーを保持して二つの URL にアクセスする
- Python3.1 : URLを読み出してファイルに出力