Après avoir défini les bases de données et les tables pendant le développement à l'aide de MySQL, vous souhaiterez peut-être des données de test. Ici, nous allons introduire la procédure de la création de la base de données à l'enregistrement des données de test.
Lors de la création d'une grande quantité de données de test, il est nécessaire d'automatiser le travail. Dans MySQL, vous pouvez exécuter des fichiers avec des commandes SQL en plus de saisir manuellement des commandes SQL.
Par exemple, s'il existe un fichier qui décrit la commande SQL suivante, la méthode d'exécution est la suivante.
SQLFile.sql
CREATE DATABASE CreateTestData;
SHOW DATABASES;
Terminal
#Connectez-vous à mysql
mysql -u root -p
Enter password:
・
・
・
# SQLFile.Exécutez SQL
mysql> SOURCE SQLFile.sql
+--------------------+
| Database |
+--------------------+
| information_schema |
| CreateTestData |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.03 sec)
Étant donné que vous pouvez lire un fichier externe et exécuter des commandes SQL de cette manière, si vous pouvez générer un fichier qui décrit une grande quantité de commandes SQL qui génèrent des données de test, vous pouvez enregistrer une grande quantité de données de test.
Cette fois, définissez la table utilisateur suivante et créez des exemples de données.
CREATE.sql
CREATE TABLE user (
user_id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(45),
user_age INT,
created_at DATETIME
);
Du point de vue de la compréhension et de la lecture du contenu, le programme qui génère le script sql avec python3 est illustré ci-dessous.
createSQL.py
# coding:utf-8
import random
import time
#Générer un nom à partir d'une liste de nom et prénom
def randomName():
myouji = ["Tanaka", "Suzuki", "Sato", "Takahashi"]
namae = ["Taro", "Jiro", "Saburo", "Hanako"]
return random.choice(myouji) + random.choice(namae)
# 0~Générer 100 nombres aléatoires
def randomAge():
return random.randint(0, 100)
#Génération de date aléatoire entre le début et la fin
def randomDate(start, end):
format = '%Y-%m-%d %H:%M:%S'
stime = time.mktime(time.strptime(start, format))
etime = time.mktime(time.strptime(end, format))
ptime = stime + random.random() * (etime - stime)
return time.strftime(format, time.localtime(ptime))
#Nom du fichier de sortie
OUTPUT_FILE = "TestData.sql"
#Nombre de données à enregistrer
RECORD_COUNT = 10
#Chaîne de commande SQL à exécuter
sqlCommands = ""
#Spécifiez la base de données à utiliser(Cette fois, CreateTestData)
sqlCommands += "USE CreateTestData;\n"
#Générer des instructions INSERT pour le nombre de données à enregistrer
for _ in range(RECORD_COUNT):
#Génération de données aléatoires à enregistrer
name = randomName()
age = randomAge()
date = randomDate("2014-6-28 00:00:00", "2015-6-28 00:00:00")
#Générer une instruction d'insertion à partir de données aléatoires
sqlCommands += "INSERT INTO user " \
"(user_name, user_age, created_at) " \
"VALUES ('{}', '{}', '{}');\n"\
.format(name, age, date)
#Ecrire la commande SQL générée dans un fichier
f = open(OUTPUT_FILE, 'w')
f.write(sqlCommands)
f.close()
L'exécution du programme ci-dessus générera un fichier appelé TestData.sql dans le même répertoire. S'il peut être généré avec succès, le contenu de TestData.sql sera comme suit, et les instructions INSERT pour le nombre de données enregistrées sont décrites.
TestData.sql
USE CreateTestData;
INSERT INTO user (user_name, user_age, created_at) VALUES ('Jiro Sato', '39', '2015-04-28 04:08:08');
INSERT INTO user (user_name, user_age, created_at) VALUES ('Jiro Suzuki', '60', '2015-06-25 23:37:52');
INSERT INTO user (user_name, user_age, created_at) VALUES ('Saburo Tanaka', '40', '2015-04-20 04:56:53');
・
・
・
Pour enregistrer les données de test, exécutons et vérifions le fichier de script généré comme indiqué ci-dessus.
Terminal
#Connectez-vous à mysql
mysql -u root -p
Enter password:
・
・
・
#Enregistrement des données de test
mysql> SOURCE TestData.sql
Database changed
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
・
・
・
#Vérifiez si les données ont été enregistrées
mysql> select * from user;
+---------+--------------+----------+---------------------+
| user_id | user_name | user_age | created_at |
+---------+--------------+----------+---------------------+
| 1 |Jiro Sato| 39 | 2015-04-28 04:08:08 |
| 2 |Jiro Suzuki| 60 | 2015-06-25 23:37:52 |
| 3 |Saburo Tanaka| 40 | 2015-04-20 04:56:53 |
| 4 |Saburo Sato| 77 | 2015-04-08 02:46:19 |
| 5 |Jiro Sato| 57 | 2014-11-17 11:21:06 |
| 6 |Taro Takahashi| 83 | 2014-09-20 07:57:11 |
| 7 |Hanako Tanaka| 24 | 2014-11-17 00:51:38 |
| 8 |Jiro Takahashi| 89 | 2014-11-29 20:22:24 |
| 9 |Taro Tanaka| 38 | 2015-02-26 18:04:42 |
| 10 |Jiro Sato| 13 | 2014-09-26 13:14:35 |
+---------+--------------+----------+---------------------+
10 rows in set (0.00 sec)
Il a été confirmé que 10 échantillons de données avaient été enregistrés avec succès.
J'ai pu enregistrer les données en générant un fichier de script pour créer des données de test et en exécutant le fichier de script. À mesure que le nombre de tables et de colonnes augmente, vous pouvez enregistrer des données de test pour n'importe quelle table et colonne en étendant le programme en conséquence.
Profitons de la vie de développement!
Recommended Posts