ホームページ >バックエンド開発 >Python チュートリアル >Pythonデータベースmysql操作の詳しい説明
前書き: 私は最近 Django を学び始めて、Web フレームワークについて学んだ後、突然、より多くの知識を知ったように感じました。嬉しい〜〜 このブログはデータベースの基本的な操作を整理して書いたもので、内容は少なめです。明日はSQLAlchemyを書きます。
1. 基本的なデータベース操作
1. データベースへの中国語の書き込みを許可したい場合は、データベースの作成時に次のコマンドを使用できます
create database zcl charset utf8;
2. 学生テーブルを表示します。構造
desc students;
3. Students テーブル構造を作成するステートメントを表示します
show create table students;
4. データベースを削除します
drop database zcl;
5.
りー
追記: 私は上記の「簡単な説明+コード」ブログが大嫌いです。実は当時、mysql ターミナルでサンプルをたくさん書いたのですが、当時のコンピュータでは動画視聴ソフトが動作していたため、Ctrl+C/V が使えませんでした。もうめんどくさいです笑~~
2. データベースへの Python 接続
この記事の例は python3.4 環境でのものです。 1. pymysql モジュールをインストールします
alter table students add column nal char(64);
2. データベースに接続し、データ インスタンスを挿入します
pip3 install pymysql
import pymysql #生成实例,连接数据库zcl conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur = conn.cursor() #插入数据 reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Jack','man',25,1351234,"CN")) reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Mary','female',18,1341234,"USA")) conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
3. データを取得します
mysql> select* from students;+----+------+-----+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+-----+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | +----+------+-----+-----+-------------+------+ 2 rows in set
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') cur = conn.cursor() reCount = cur.execute('select* from students') res = cur.fetchone() #获取一条数据 res2 = cur.fetchmany(3) #获取3条数据 res3 = cur.fetchall() #获取所有(元组格式) print(res) print(res2) print(res3) conn.commit() cur.close() conn.close()
3. トランザクションのロールバック
データが送信されない限り、ロールバックすることができますが、IDはロールバック後にインクリメントされます。次の例を見てください: 3 つのデータを挿入します (トランザクションのロールバックに注意してください):
(1, 'zcl', 'man', 22, '15622341234', None) ((2, 'alex', 'man', 30, '15622341235', None), (5, 'Jack', 'man', 25, '1351234', 'CN'), (6, 'Mary', 'female', 18, '1341234', 'USA')) ()
コマンドの実行前とコマンドの実行後 (ロールバック操作を含む) (ID 番号に注意してください) : 違います 上記のコードを実行した結果は上記のコードを実行したのと同じです!! トランザクションがロールバックされているため、コマンドの実行後、students テーブルはデータを追加しません。ロールバック操作は含まれません): 上記のコードの 11 行目をコメントアウトするだけです。
import pymysql #连接数据库zcl conn=pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur=conn.cursor() #插入数据 reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Jack', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s,%s,%s,%s,%s)', ('Jack2', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Mary', 'female', 18, 1341234, "USA")) conn.rollback() #事务回滚 conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
概要: トランザクションはロールバックされても、ID はインクリメントされており、ロールバックによってキャンセルされませんが、これはデータの一貫性には影響しません (基礎となる原理は私のものです わかりません~)
4. データのバッチ挿入
mysql> select* from students;+----+------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | +----+------+--------+-----+-------------+------+ 4 rows in setpycharmの出力: 5