Heim Backend-Entwicklung Python-Tutorial 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

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

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() 
  #关闭链接
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Grund, warum Pipeline persistente Speicherdateien bei der Verwendung von Scapy Crawler nicht geschrieben werden kann? Was ist der Grund, warum Pipeline persistente Speicherdateien bei der Verwendung von Scapy Crawler nicht geschrieben werden kann? Apr 01, 2025 pm 04:03 PM

Bei der Verwendung von Scapy Crawler kann der Grund, warum Pipeline persistente Speicherdateien nicht geschrieben werden kann? Diskussion beim Lernen, Scapy Crawler für Data Crawler zu verwenden, begegnen Sie häufig auf eine ...

Was ist der Grund, warum der Python -Prozesspool gleichzeitige TCP -Anfragen behandelt und den Kunden dazu bringt, stecken zu bleiben? Was ist der Grund, warum der Python -Prozesspool gleichzeitige TCP -Anfragen behandelt und den Kunden dazu bringt, stecken zu bleiben? Apr 01, 2025 pm 04:09 PM

Python Process Pool verarbeitet gleichzeitige TCP -Anfragen, die dazu führen, dass der Client stecken bleibt. Bei der Verwendung von Python für die Netzwerkprogrammierung ist es entscheidend, gleichzeitige TCP -Anforderungen effizient zu verarbeiten. ...

Wie kann ich die ursprünglichen Funktionen betrachten, die von Python Functools.Partial Object in intern eingekapselt sind? Wie kann ich die ursprünglichen Funktionen betrachten, die von Python Functools.Partial Object in intern eingekapselt sind? Apr 01, 2025 pm 04:15 PM

Erforschen Sie tief die Betrachtungsmethode von Python Functools.Partialial Object in functools.Partial mit Python ...

Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Apr 01, 2025 pm 05:24 PM

Auswahl der Python-plattformübergreifenden Desktop-Anwendungsentwicklungsbibliothek Viele Python-Entwickler möchten Desktop-Anwendungen entwickeln, die sowohl auf Windows- als auch auf Linux-Systemen ausgeführt werden können ...

Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Apr 01, 2025 pm 06:27 PM

Erste Schritte mit Python: Hourglas -Grafikzeichnung und Eingabeüberprüfung In diesem Artikel wird das Problem der Variablendefinition gelöst, das von einem Python -Anfänger im Hourglass -Grafikzeichnungsprogramm auftritt. Code...

Wie kann ich große Produktdatensätze in Python effizient zählen und sortieren? Wie kann ich große Produktdatensätze in Python effizient zählen und sortieren? Apr 01, 2025 pm 08:03 PM

Datenkonvertierung und Statistik: Effiziente Verarbeitung großer Datensätze In diesem Artikel werden ausführlich das Umwandeln einer Datenliste in eine andere enthält ...

Bieten Google und AWS öffentliche PYPI -Bildquellen an? Bieten Google und AWS öffentliche PYPI -Bildquellen an? Apr 01, 2025 pm 05:15 PM

Viele Entwickler verlassen sich auf PYPI (PythonpackageIndex) ...

Wie optimieren Sie die Verarbeitung hochauflösender Bilder in Python, um präzise weiße kreisförmige Bereiche zu finden? Wie optimieren Sie die Verarbeitung hochauflösender Bilder in Python, um präzise weiße kreisförmige Bereiche zu finden? Apr 01, 2025 pm 06:12 PM

Wie gehe ich mit hochauflösenden Bildern in Python um, um weiße Bereiche zu finden? Verarbeitung eines hochauflösenden Bildes von 9000x7000 Pixel, wie man zwei des Bildes genau findet ...

See all articles