1. はじめに
使い方はMySQLdbとほぼ同じですが、 pymysql は
をインストールします 2. 操作
を使用します。完全な接続と基本操作から始めましょう
import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') # 创建游标 cursor = conn.cursor() # 执行SQL,并返回收影响行数 effect_row = cursor.execute("update hosts set host = '1.1.1.2'") # 执行SQL,并返回受影响行数 #effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,)) # 执行SQL,并返回受影响行数 #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) # 提交,不然无法保存新建或者修改的数据 conn.commit() # 关闭游标 cursor.close() # 关闭连接 conn.close()
データベースにデータを挿入し、try ステートメントを使用し、例外が発生したときに自動的にロールバックします
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # 如果发生错误则回滚 db.rollback() # 关闭数据库连接 db.close()
3. 複数のデータをデータ テーブルに挿入します。運用環境に複数のデータを挿入するには、バックグラウンドでデータを取得した後、リスト ([('v1','v2' ),('v3','v4') の形式でステートメントを渡します。 ])
# 创建连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') # 创建游标 cur = conn.cursor() if request.method == "POST": title = request.POST.get("title") title_en = request.POST.get("title_en") content = request.POST.get("content") content_en = request.POST.get("content_en") notification_type =request.POST.get("notification_type").strip() user_list = request.POST.get("user_list") updated_datetime = datetime.now() created_datetime = datetime.now() values_list = [] for user in user_id_list: temp = updated_datetime,created_datetime,title,title_en,content,content_en,notification_type,user['id'] values_list.append((temp)) try: cur.executemany('''insert into app_notification(updated_datetime, created_datetime, title, title_en, content, content_en, notification_type, is_read, recipient_id) values(%s, %s, %s, %s, %s, %s, %s, 0, %s)''',values_list) conn.commit() conn.close() except Exception as err: conn.rollback() logging.error(err) logging.error(traceback.format_exc()) conn.close()
# 最新の自己インクリメント ID を取得します
new_id =cursor.lastrowid
4. データベースクエリ操作
Python は fetchone() メソッドを使用して Mysql にクエリを実行し、単一のデータを取得します。 ) メソッドで複数のデータを取得します。
fetchone(): このメソッドは次のクエリ結果セットを取得します。結果セットはオブジェクトです。
fetchall(): 返されたすべての結果行を受け取ります。
rowcount: これは読み取り専用のプロパティであり、execute() メソッドの実行後に影響を受ける行の数を返します。
import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') cursor = conn.cursor() cursor.execute("select * from hosts") # 获取第一行数据 row_1 = cursor.fetchone() # 获取前n行数据 # row_2 = cursor.fetchmany(3) # 获取所有数据 # row_3 = cursor.fetchall() conn.commit() cursor.close() conn.close()
注: データを取得するときは、次のように、cursor.scroll(num, mode) を使用してカーソル位置を移動できます。
cursor.scroll(1, mode='relative') # 相対的に移動します。現在の位置へ
cursor.scroll(2,mode='absolute') # 絶対位置を基準に相対的に移動
5.データ型の取得
取得されるデフォルトのデータは、必要な場合は祖先型です。つまり、辞書型データです。
#!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') # 游标设置为字典类型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) r = cursor.execute("call p1()") result = cursor.fetchone() conn.commit() cursor.close() conn.close()
エラー処理
DB API では、次の表にリストされているいくつかのデータベース操作エラーと例外が定義されています。これらのエラーと例外: