Maison  >  Article  >  développement back-end  >  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

黄舟
黄舟original
2017-10-04 09:25:462376parcourir

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() 
  #关闭链接
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:
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