Maison  >  Article  >  développement back-end  >  Explication détaillée du fonctionnement de la base de données Python MySQL

Explication détaillée du fonctionnement de la base de données Python MySQL

高洛峰
高洛峰original
2017-03-08 09:55:571266parcourir

Avant-propos : J'ai récemment commencé à apprendre Django, et après avoir appris le framework Web, j'ai soudain eu l'impression d'avoir appris beaucoup plus de connaissances. happy~~ Ce blog organise et écrit les opérations de base de la base de données, et le contenu est assez petit. J'écrirai SQLAlchemy demain.

1. Opérations de base de la base de données

1 Si vous souhaitez autoriser l'écriture chinoise dans la base de données, vous pouvez utiliser la commande suivante lors de la création. la base de données

create database zcl charset utf8;


2. Afficher la structure du tableau des étudiants

desc students;


3. Afficher les instructions qui créent la structure de la table des étudiants

show create table students;


4. Supprimer la base de données

drop database zcl;


5. Créer un nouveau champ

alter table students add column nal char(64); 


PS : je déteste vraiment ça. Un blog "code simplement expliqué". En fait, j'ai écrit beaucoup d'exemples dans le terminal mysql à cette époque, mais comme l'ordinateur exécutait un logiciel de visionnage de vidéos à l'époque, je ne pouvais pas Ctrl C/V. Je suis paresseux maintenant haha~~

2. La base de données de connexion python

python3 ne prend plus en charge mysqldb. Son module de remplacement est PyMySQL. Les exemples de cet article sont dans l'environnement python3.4.

1. Installez le module pymysql


pip3 install pymysql


2. Connectez-vous à la base de données et insérez l'instance de données


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)


Afficher le résultats :


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


3. Obtenir des données


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()


Sortie :


(1, 'zcl', 'man', 22, '15622341234', None)
((2, 'alex', 'man', 30, '15622341235', None), (5, 'Jack', 'man', 25, '1351234', 'CN'), (6, 'Mary', 'female', 18, '1341234', 'USA'))
()


3. L'annulation de la transaction

L'annulation de la transaction est exécutée avant l'écriture des données. à la base de données, donc la restauration de la transaction conn.rollback() doit avoir lieu avant que l'instance ne valide la commande conn.commit(). Tant que les données ne sont pas soumises, elles peuvent être annulées, mais l'ID sera incrémenté après la restauration . Veuillez consulter l'exemple suivant :

Insérer 3 éléments de données (noter l'annulation de la transaction) :


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)

Avant d'exécuter la commande et après l'exécution de la commande (y compris l'opération d'annulation) (notez le numéro d'identification) : les résultats de la non-exécution du code ci-dessus et de l'exécution du code ci-dessus sont les mêmes !! la table des étudiants n'augmentera pas les données !


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 set

Après avoir exécuté la commande (hors opération de rollback) : commentez simplement la 11ème ligne du code ci-dessus.


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  |
| 10 | Jack  | man    |  25 | 1351234     | CN   |
| 11 | Jack2 | man    |  25 | 1351234     | CN   |
| 12 | Mary  | female |  18 | 1341234     | USA  |
+----+-------+--------+-----+-------------+------+
7 rows in set


Résumé : Bien que la transaction soit annulée, l'ID est toujours Il est auto-incrémenté et ne sera pas annulé en raison d'un rollback, mais cela n'affecte pas la cohérence des données (Je ne connais pas le principe sous-jacent ~)

4. Insérer les données par lots


import pymysql
#连接数据库zcl
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl')
#生成游标,当前实例所处状态
cur = conn.cursor()
li = [
    ("cjy","man",18,1562234,"USA"),
    ("cjy2","man",18,1562235,"USA"),
    ("cjy3","man",18,1562235,"USA"),
    ("cjy4","man",18,1562235,"USA"),
    ("cjy5","man",18,1562235,"USA"),
]

#插入数据
reCount = cur.executemany('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)', li)

#conn.rollback()  #事务回滚
conn.commit()  #实例提交命令

cur.close()
conn.close()
print(reCount)


Sortie sous pycharm : 5

mysql Le terminal affiche :

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  |
| 10 | Jack  | man    |  25 | 1351234     | CN   |
| 11 | Jack2 | man    |  25 | 1351234     | CN   |
| 12 | Mary  | female |  18 | 1341234     | USA  |
+----+-------+--------+-----+-------------+------+
7 rows in set


mysql> 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  |
| 10 | Jack  | man    |  25 | 1351234     | CN   |
| 11 | Jack2 | man    |  25 | 1351234     | CN   |
| 12 | Mary  | female |  18 | 1341234     | USA  |
| 13 | cjy   | man    |  18 | 1562234     | USA  |
| 14 | cjy2  | man    |  18 | 1562235     | USA  |
| 15 | cjy3  | man    |  18 | 1562235     | USA  |
| 16 | cjy4  | man    |  18 | 1562235     | USA  |
| 17 | cjy5  | man    |  18 | 1562235     | USA  |
+----+-------+--------+-----+-------------+------+
12 rows in set
Ce que vous avez appris doit être résumé dans le temps, certaines choses ont été oubliées~_~


Plus d'articles liés à une explication détaillée du fonctionnement de MySQL de la base de données Python. Veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn