Maison développement back-end Tutoriel Python Un exemple simple de python exploitant MySQL pour simuler des opérations de virement bancaire

Un exemple simple de python exploitant MySQL pour simuler des opérations de virement bancaire

Oct 04, 2017 am 09:25 AM
mysql python 银行

Cet article présente principalement Python pour faire fonctionner MySQL afin de simuler des opérations de virement bancaire simples. Les amis qui en ont besoin peuvent s'y référer

Connaissances de base

1. Installation de MySQL-python

téléchargez, puis pip installez le package d'installation

2.

(1), connexion d'objet de connexion à la base de données, établit une connexion réseau entre le client python et la base de données, la méthode de création est MySQLdb.Connect (paramètre)

Il y a six paramètres : host (Adresse du serveur MySQL, Généralement local est 127.0.0.1)

PORT (numéro de port du serveur MySQL)

Utilisateur (nom d'utilisateur)
PASSWD (mot de passe)
DB (nom de la base de données)
Charset (codage connecté)
Méthode de connexion : Cursor () Utilisez cette connexion et revenez au curseur

Commit () Soumettez la transaction en cours

Rollback () Restaurez le transaction en cours

Close () Fermer la connexion

(2), curseur d'objet curseur de base de données, utilisé pour exécuter des requêtes et obtenir des résultats

Méthode : exécuter (op[,args]) exécute un requête et commande de base de données

fetchone() obtient la ligne suivante du jeu de résultats

fetchmany(size) obtient les prochaines lignes du jeu de résultats

fetchall() récupère toutes les lignes restantes du result set
rowcount Le nombre de lignes de données renvoyées par la dernière exécution Ou affecter le nombre de lignes
close() pour fermer l'objet curseur

connexion et curseur : la connexion est équivalente à la route entre python et MySQL, et le curseur est équivalent au véhicule de transport sur la route pour transmettre les commandes et les résultats.


3. Commande simple :

sélectionner les données de requête : sql="sélectionner * du nom de la table pour vérifier l'élément"

insérer Insérer des données : sql = "insérer dans l'élément inséré dans le nom de la table"

mettre à jour les données de modification : sql="mettre à jour le nom de la table définir l'élément modifié"
supprimer les données supprimées : sql="supprimer de l'élément supprimé du nom de la table"
où se trouve également sql La clé de la commande est généralement où en-tête = nom de la colonne pour localiser cette colonne

4 Transaction

Une unité d'exécution de programme qui accède et met à jour la base de données, exécute tout. les commandes peuvent être appelées transactions

Ayant atomicité, cohérence, isolation et durabilité

Exécution de la transaction :

conn.commit() termine la transaction normalement

conn.rollback () termine la transaction anormalement et annule la transaction. Si une erreur se produit lors de l'opération continue dans l'unité d'exécution du programme, l'opération précédente est restaurée.


Processus d'opération simple : Démarrer → Créer une connexion → Obtenir le curseur → Unité d'exécution du programme → Fermer le curseur → Fermer la connexion → Fin

Code du système de virement bancaire simulé


#coding=utf-8 
import sys 
import MySQLdb 
''''' 
python操作MySQL数据库,模拟银行转账 
''' 
class Trans_for_Money(object): 
 #初始化 类 
 def __init__(self,conn): 
  self.conn = conn 
 #### 1、检查所输入的账号是否存在 #### 
 def check_acct_available(self,source_acctid): 
  #使用与数据库的链接并返回游标 
  cursor=self.conn.cursor() 
  try: 
   #数据库命令 
   sql="select * from tr_money where acctid=%s" %source_acctid 
   #执行命令 
   cursor.execute(sql) 
   #为方便观察执行过程 
   print "check_acct_available:" + sql 
   #讲结果集放入变量result中,若result不等于1,则没有这个账号,输出异常 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("账号%s不存在" %source_acctid) 
  finally: 
   #若过程出现问题,仍需要关闭游标对象 
   cursor.close() 
 #### 2、检查减款人余额是否充足,方法与上一个函数一样,只是多加了一个money参数 ### 
 def has_enough_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money) 
   cursor.execute(sql) 
   print "has_enough_money:" + sql 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("账号%s余额不足" %source_acctid) 
  finally: 
   cursor.close() 
 #### 3、减款操作 ### 
 def reduce_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   #数据库命令,减去对应减款人的金额数 
   sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid) 
   cursor.execute(sql) 
   print "reduce_money:" + sql 
   #操作的execute()数据行数不等于1则减款失败 
   if cursor.rowcount!=1: 
    raise Exception("账号%s减款失败" %source_acctid) 
  finally: 
   cursor.close() 
 #### 4、收款操作,与减款方法相同 ### 
 def add_money(self,target_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid) 
   cursor.execute(sql) 
   print "add_money:" + sql 
   if cursor.rowcount!=1: 
    raise Exception("账号%s收款失败" %target_acctid) 
  finally: 
   cursor.close() 
 #### 5、分别传入参数,代入上方函数,执行操作 ### 
 def trans_for(self,source_acctid,target_acctid,money): 
  try: 
   self.check_acct_available(source_acctid) 
   self.check_acct_available(target_acctid) 
   self.has_enough_money(source_acctid,money) 
   self.reduce_money(source_acctid,money) 
   self.add_money(target_acctid,money) 
   #提交当前事务 
   self.conn.commit() 
  except Exception as e: 
   #若出错,回滚当前事务 
   self.conn.rollback() 
   raise e 
if __name__=="__main__": 
 # source_acctid=sys.argv[1] 
 # target_acctid=sys.argv[2] 
 # money=sys.argv[3] 
 #建立与数据库的链接 
 conn = MySQLdb.Connect( 
       host='127.0.0.1', 
       port=3306, 
       user='root', 
       passwd='12345678', 
       db='tt', 
       charset='utf8' 
       ) 
 #手动输入减款人、收款人、转款数 
 source_acctid=raw_input("请输入减款人: ") 
 target_acctid=raw_input("请输入收款人: ") 
 money=raw_input("请输入转款数: ") 
 #将参数传入类中 
 tr_money=Trans_for_Money(conn) 
 try: 
  tr_money.trans_for(source_acctid,target_acctid,money) 
 except Exception as e: 
  print"出现问题:"+str(e) 
 finally: 
  conn.close() 
  #关闭链接
Copier après la connexion
3. Résolution de problèmes

1. .argv[ ]

Parce que l'IDE utilisé dans la vidéo pédagogique est MyEclipse, et enfin j'utilise run.Configuration pour saisir les paramètres, et j'utilise pycharm, ce qui signifie que je suis stupide et que je ne le trouve pas, ou qu'il n'existe pas en fait !

J'ai donc choisi d'utiliser raw_input() pour saisir les paramètres lors de l'exécution

En fait, j'ai essayé de comprendre sys.argv[ ], mais je ne le comprends toujours pas clairement.

2. mysql_exceptions.IntegrityError : (1062, "Entrée en double '7' pour la clé 'PRIMARY'")

Cette erreur signifie que les données que vous souhaitez insérer existent déjà, il est préférable pour l'observer Y a-t-il un conflit entre les données de la base de données et le fonctionnement de votre propre programme

3 Erreur MySql lors de la création d'une table ou de la saisie d'une valeur : 1170-BLOB/TEXT column'name'utilisé dans la spécification de clé sans a. longueur de clé

Le message d'erreur est que le champ BLOB ou TEXT utilise une clé avec une longueur de valeur de clé non spécifiée

Solution : définissez d'autres clés primaires ou modifiez le format de données en varchar

URL d'explication détaillée : http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4. TypeError : 'post' est un argument de mot-clé non valide pour cette fonction

Raison de l'erreur : TypeError : "post" C'est un paramètre invalide de cette fonction

Cette question est tellement fausse que je suis sans voix, j'étais tellement confus que j'ai écrit "port"=3306 dans "post"=. '3306'

5, 1054, "Colonne inconnue 'acctid' dans la 'clause Where'

Cause de l'erreur : la colonne "acctid" est introuvable dans la clause Where

Haha, l'eau dans mon cerveau de la dernière erreur n'a pas été évacuée, alors j'ai changé le tableau L'en-tête est mal écrit...

6. De plus, il y a une autre erreur dans la saisie manuelle de déductions. Lorsque le bénéficiaire est réglé sur des lettres ou des caractères chinois, il est introuvable

C'est peut-être moi qui pose des problèmes lors de la création d'un code ou d'une table de base de données signifie que vous êtes encore novice en termes de caractère. conversion et base de données, continuez à travailler dur !

7. Démarrez la base de données MySQL

Faites un clic droit sur l'ordinateur → → Gestion → Services et applications → Services → Rechercher MySQL → Cliquez avec le bouton droit pour démarrer.

4. Affichage d'exécution spécifique

1. Table tr_money de la base de données État initial

2. Exécution du code, entrez le déducteur, le bénéficiaire et le montant du transfert

3, exécutez, le résultat est que le processus d'opération indiqué dans le code est spécifiquement imprimé

4. État de la table tr_money de la base de données après exécution


Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment créer Navicat Premium Comment créer Navicat Premium Apr 09, 2025 am 07:09 AM

Créez une base de données à l'aide de NAVICAT Premium: Connectez-vous au serveur de base de données et entrez les paramètres de connexion. Cliquez avec le bouton droit sur le serveur et sélectionnez Créer une base de données. Entrez le nom de la nouvelle base de données et le jeu de caractères spécifié et la collation. Connectez-vous à la nouvelle base de données et créez le tableau dans le navigateur d'objet. Cliquez avec le bouton droit sur le tableau et sélectionnez Insérer des données pour insérer les données.

Comment créer une nouvelle connexion à MySQL dans Navicat Comment créer une nouvelle connexion à MySQL dans Navicat Apr 09, 2025 am 07:21 AM

Vous pouvez créer une nouvelle connexion MySQL dans NAVICAT en suivant les étapes: ouvrez l'application et sélectionnez une nouvelle connexion (CTRL N). Sélectionnez "MySQL" comme type de connexion. Entrez l'adresse Hostname / IP, le port, le nom d'utilisateur et le mot de passe. (Facultatif) Configurer les options avancées. Enregistrez la connexion et entrez le nom de la connexion.

Comment se connecter à MySQL local à Navicat Comment se connecter à MySQL local à Navicat Apr 09, 2025 am 07:45 AM

Pour se connecter à une base de données MySQL locale à l'aide de NAVICAT: créez une connexion et définissez le nom de connexion, l'hôte, le port, le nom d'utilisateur et le mot de passe. Testez la connexion pour vous assurer que les paramètres sont corrects. Enregistrez la connexion. Sélectionnez une nouvelle connexion dans la liste de connexions. Double-cliquez sur la base de données à laquelle vous souhaitez vous connecter.

Quelle est la différence entre la syntaxe pour ajouter des colonnes dans différents systèmes de base de données Quelle est la différence entre la syntaxe pour ajouter des colonnes dans différents systèmes de base de données Apr 09, 2025 pm 02:15 PM

不同数据库系统添加列的语法为 : MySQL: alter table table_name Ajouter Column_name data_type; postgresql: alter table table_name Add Column Column_name data_type; Oracle: alter table table_name add (chronn_name data_type); sql server: alter alter table_name Add Column_name data__

Comment utiliser Aws Glue Crawler avec Amazon Athena Comment utiliser Aws Glue Crawler avec Amazon Athena Apr 09, 2025 pm 03:09 PM

En tant que professionnel des données, vous devez traiter de grandes quantités de données provenant de diverses sources. Cela peut poser des défis à la gestion et à l'analyse des données. Heureusement, deux services AWS peuvent aider: AWS Glue et Amazon Athena.

Comment ajouter des colonnes dans des outils graphiques SQL? Comment ajouter des colonnes dans des outils graphiques SQL? Apr 09, 2025 pm 12:54 PM

Ajouter des colonnes dans l'outil graphique SQL: sélectionnez le tableau dans les colonnes que vous souhaitez ajouter. Cliquez avec le bouton droit et sélectionnez "Alter Table" ou des options similaires. Définit les propriétés de la nouvelle colonne (nom, type de données, longueur ou s'il est vide). Spécifie la valeur par défaut de la nouvelle colonne, le cas échéant. Sélectionnez le type de données approprié pour éviter les erreurs de données. Utilisez des noms de colonne significatifs. Considérez l'impact des performances lors de l'exécution d'opérations d'addition de colonnes sur de grandes tables. Sauvegardez toujours la base de données avant l'opération pour éviter la perte de données.

Comment activer Navicat Premium Comment activer Navicat Premium Apr 09, 2025 am 06:57 AM

Navicat Premium est un outil de gestion de base de données qui peut être activé pour accéder à ses fonctionnalités. Les étapes d'activation comprennent: l'obtention de la clé de licence, l'installation de Navicat Premium et l'activation avec la clé de licence. Lorsque vous rencontrez des problèmes pendant l'activation, veuillez vérifier si l'entrée de clé est correcte et assurez-vous que le réseau est connecté. S'il ne peut toujours pas être résolu, veuillez contacter le support technique. Chaque clé de licence ne peut activer qu'une seule copie, la licence permanente n'expirera pas et la licence d'abonnement devra être renouvelée.

SQL Classic 50 Question Answers SQL Classic 50 Question Answers Apr 09, 2025 pm 01:33 PM

SQL (Language de requête structuré) est un langage de programmation utilisé pour créer, gérer et interroger les bases de données. Les fonctions principales incluent: la création de bases de données et de tables, d'insertion, de mise à jour et de suppression de données, de tri et de filtrage des résultats, d'agrégation des fonctions, de jonction de tables, de sous-requêtes, d'opérateurs, de fonctions, de mots clés, de manipulation de données / de définition / langage de contrôle, de types de connexion, d'optimisation de requête, de sécurité, d'outils, de ressources, de versions, d'erreurs communes, de techniques de débogage, de meilleurs pratiques, de tristes et de pliées.

See all articles