Heim  >  Artikel  >  Backend-Entwicklung  >  Ein einfaches Beispiel dafür, wie Python MySQL betreibt, um Banküberweisungsvorgänge zu simulieren

Ein einfaches Beispiel dafür, wie Python MySQL betreibt, um Banküberweisungsvorgänge zu simulieren

黄舟
黄舟Original
2017-10-04 09:25:462378Durchsuche

Dieser Artikel stellt hauptsächlich Python zum Betreiben von MySQL vor, um einfache Banküberweisungsvorgänge zu simulieren

Grundkenntnisse

1. Installation von MySQL-Python

Installationspaket herunterladen und dann pip installieren

2. API-Spezifikation zum Schreiben allgemeiner Datenbankprogramme in Python

(1), Datenbankverbindungsobjektverbindung, stellt eine Netzwerkverbindung zwischen dem Python-Client und der Datenbank her, die Erstellungsmethode ist MySQLdb.Connect (Parameter)

Es gibt sechs Parameter : Host (MySQL-Serveradresse, im Allgemeinen lokal 127.0.0.1)

PORT (MySQL-Server-Portnummer)
Benutzer (Benutzername)
PASSWD (Passwort)
DB (Datenbankname)
Zeichensatz (verbundene Codierung)

Verbindungsmethode: Cursor () Verwenden Sie diese Verbindung und kehren Sie zum Cursor zurück

Commit () Senden Sie die aktuelle Transaktion

Rollback () Rollback der aktuelle Transaktion
Close () Verbindung schließen

(2), Datenbankcursor-Objektcursor, der zum Ausführen von Abfragen und zum Erhalten von Ergebnissen verwendet wird

Methode:execute (op[,args]) führt a aus Datenbankabfrage und Befehl

fetchone() ruft die nächste Zeile der Ergebnismenge ab

Oder beeinflusst die Anzahl der Zeilen
close(), um die Cursorobjektverbindung

und den Cursor zu schließen : Die Verbindung entspricht der Straße zwischen Python und MySQL, und der Cursor entspricht dem Transportfahrzeug auf der Straße, um Befehle und Ergebnisse zu übertragen.


3. Einfacher Befehl:

select Abfragedaten: sql="select * from table name to check item"insert Daten einfügen: sql = „In Tabellennamen einfügen, eingefügtes Element“

Änderungsdaten aktualisieren: sql="Tabellennamen aktualisieren, geändertes Element festlegen"

Daten löschen: sql="Aus Tabellennamen löschen, gelöschtes Element"
wobei auch SQL Der Schlüssel zum Befehl ist normalerweise: header = Spaltenname zum Auffinden dieser Spalte


4. Transaktion

Eine Programmausführungseinheit, die auf die Datenbank zugreift und diese aktualisiert. Alle ausgeführt Befehle können als Transaktionen bezeichnet werden

Atomizität, Konsistenz, Isolation und Haltbarkeit aufweisen

Transaktionsausführung:

conn.commit() beendet die Transaktion normal

conn.rollback () beendet die Transaktion abnormal und setzt die Transaktion zurück. Wenn im fortlaufenden Vorgang in der Programmausführungseinheit ein Fehler auftritt, wird der vorherige Vorgang wiederhergestellt.

Einfacher Bedienungsprozess: Start → Verbindung erstellen → Cursor abrufen → Programmausführungseinheit → Cursor schließen → Verbindung schließen → Ende

Simulierter Banküberweisungssystemcode


3. Problemlösung

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

1 .argv[ ]

Weil die im Lehrvideo verwendete IDE MyEclipse ist und ich schließlich run.Configuration zur Eingabe von Parametern verwende und Pycharm verwende, was bedeutet, dass ich dumm bin und es nicht finden kann oder es tatsächlich nicht existiert !

Also habe ich mich entschieden, raw_input() zu verwenden, um Parameter während der Ausführung einzugeben

Tatsächlich habe ich versucht, sys.argv[] zu verstehen, aber ich verstehe es immer noch nicht deutlich.

2. mysql_Exceptions.IntegrityError: (1062, „Doppelter Eintrag ‚7‘ für Schlüssel ‚PRIMARY‘“)

Dieser Fehler bedeutet, dass die Daten, die Sie einfügen möchten, bereits vorhanden sind Beobachten Sie es. Gibt es einen Konflikt zwischen den Datenbankdaten und Ihrem eigenen Programmbetrieb?

3. MySql-Fehler beim Erstellen einer Tabelle oder beim Eingeben eines Werts: 1170-BLOB/TEXT-Spalte „Name“ wird in der Schlüsselspezifikation ohne verwendet eine Schlüssellänge

Die Fehlermeldung lautet, dass das BLOB- oder TEXT-Feld einen Schlüssel mit einer nicht angegebenen Schlüsselwertlänge verwendet

Lösung: Legen Sie andere Primärschlüssel fest oder ändern Sie das Datenformat in varchar

Detaillierte Erklärung URL: http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4. TypeError: „post“ ist ein ungültiges Schlüsselwortargument für diese Funktion

Fehlergrund: TypeError: „post“ Es ist ein ungültiger Parameter dieser Funktion

Diese Frage ist so falsch, dass ich sprachlos war, dass ich „port“=3306 in „post“ geschrieben habe. ='3306'

5, 1054, „Unbekannte Spalte ‚acctid‘ in ‚where-Klausel‘

Fehlerursache: Die Spalte „acctid“ kann in der where-Klausel nicht gefunden werden

Haha, das Wasser in meinem Gehirn vom letzten Fehler wurde nicht abgelassen, also habe ich die Tabelle geändert. Der Header ist falsch geschrieben...

6. Außerdem gibt es einen weiteren Fehler im Handbuch Wenn der Zahlungsempfänger auf Buchstaben oder chinesische Zeichen eingestellt ist, kann es sein, dass ich beim Erstellen eines Codes oder einer Datenbanktabelle noch ein Anfänger bin Zeichenkonvertierung und Datenbank, arbeiten Sie weiter hart!

7. Starten Sie die MySQL-Datenbank. Klicken Sie mit der rechten Maustaste auf den Computer → → Verwaltung → Dienste und Anwendungen → Dienste → Suchen Sie mit der rechten Maustaste Start

4. Spezifische Ausführungsanzeige

1. Datenbank tr_money Tabelle Ausgangszustand

2. Codeausführung, Debitor, Zahlungsempfänger und Überweisungsbetrag eingeben

3 , ausführen, und das Ergebnis ist, dass der im Code angezeigte Vorgangsprozess spezifisch ist gedruckt

4. Status der Datenbank tr_money nach der Ausführung


Zusammenfassung

Das obige ist der detaillierte Inhalt vonEin einfaches Beispiel dafür, wie Python MySQL betreibt, um Banküberweisungsvorgänge zu simulieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn