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

高洛峰
Libérer: 2017-03-08 09:55:57
original
1280 Les gens l'ont consulté

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;
Copier après la connexion


2. Afficher la structure du tableau des étudiants

desc students;
Copier après la connexion


<🎜. >

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

show create table students;
Copier après la connexion


4. Supprimer la base de données

drop database zcl;
Copier après la connexion


5. Créer un nouveau champ

alter table students add column nal char(64); 
Copier après la connexion


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
Copier après la connexion


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


import pymysql
#生成实例,连接数据库zcl
conn = pymysql.connect(host=&#39;127.0.0.1&#39;, user=&#39;root&#39;, passwd=&#39;root&#39;, db=&#39;zcl&#39;)
#生成游标,当前实例所处状态
cur = conn.cursor()
#插入数据
reCount = cur.execute(&#39;insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)&#39;,(&#39;Jack&#39;,&#39;man&#39;,25,1351234,"CN"))
reCount = cur.execute(&#39;insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)&#39;,(&#39;Mary&#39;,&#39;female&#39;,18,1341234,"USA"))

conn.commit()  #实例提交命令

cur.close()
conn.close()
print(reCount)
Copier après la connexion


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
Copier après la connexion


3. Obtenir des données


import pymysql

conn = pymysql.connect(host=&#39;127.0.0.1&#39;, user=&#39;root&#39;, passwd=&#39;root&#39;, db=&#39;zcl&#39;)
cur = conn.cursor()

reCount = cur.execute(&#39;select* from students&#39;)

res = cur.fetchone()       #获取一条数据
res2 = cur.fetchmany(3)   #获取3条数据
res3 = cur.fetchall()     #获取所有(元组格式)
print(res)
print(res2)
print(res3)
conn.commit()

cur.close()
conn.close()
Copier après la connexion


Sortie :


(1, &#39;zcl&#39;, &#39;man&#39;, 22, &#39;15622341234&#39;, None)
((2, &#39;alex&#39;, &#39;man&#39;, 30, &#39;15622341235&#39;, None), (5, &#39;Jack&#39;, &#39;man&#39;, 25, &#39;1351234&#39;, &#39;CN&#39;), (6, &#39;Mary&#39;, &#39;female&#39;, 18, &#39;1341234&#39;, &#39;USA&#39;))
()
Copier après la connexion


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=&#39;127.0.0.1&#39;, user=&#39;root&#39;, passwd=&#39;root&#39;, db=&#39;zcl&#39;)
#生成游标,当前实例所处状态
cur=conn.cursor()
#插入数据
reCount=cur.execute(&#39;insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)&#39;, (&#39;Jack&#39;, &#39;man&#39;, 25, 1351234, "CN"))
reCount=cur.execute(&#39;insert into students(name, sex, age, tel, nal) values(%s,%s,%s,%s,%s)&#39;, (&#39;Jack2&#39;, &#39;man&#39;, 25, 1351234, "CN"))
reCount=cur.execute(&#39;insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)&#39;, (&#39;Mary&#39;, &#39;female&#39;, 18, 1341234, "USA"))

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

cur.close()
conn.close()
print(reCount)
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion


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=&#39;127.0.0.1&#39;, user=&#39;root&#39;, passwd=&#39;root&#39;, db=&#39;zcl&#39;)
#生成游标,当前实例所处状态
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(&#39;insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)&#39;, li)

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

cur.close()
conn.close()
print(reCount)
Copier après la connexion


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
Copier après la connexion
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 !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal