この記事では、簡単な銀行振込操作をシミュレートするために MySQL を操作するための Python を主に紹介します。 pip install インストールパッケージ
2. Python で一般的なデータベースプログラムを書くための API 仕様 (1)、データベース接続オブジェクト接続、Python クライアントとデータベース間のネットワーク接続を確立します、作成メソッドは MySQLdb.Connect (パラメータ)
パラメータは次の 6 つです: Host (MySQL サーバーのアドレス、通常は 127.0.0.1) PORT (MySQL サーバーのポート番号)
User (ユーザー名)PASSWD (パスワード)
DB (データベース名)charset 接続メソッド:cursor() は接続を使用し、カーソルを返します
Close() 接続を閉じます
(2)、データベース カーソル オブジェクト カーソル、クエリの実行と結果の取得に使用されます
メソッド:execute (op[,args ]) データベース クエリとコマンドを実行します
use using using using through out through out through out' s through ' s ‐ through ‐ ‐‐‐‐ および を実行して結果を取得します
残りの行をすべて集約します
rowcount 数値最新の実行によって返された行数または影響を受ける行の数
3. 簡単なコマンド:
select クエリデータ: sql="select * from table name selected item"
insert データを挿入: sql="insert into table name selected item"update 変更データ: sql= " updata テーブル名 変更された項目を設定します"
delete delete data: sql = "削除された項目をテーブル名から削除"ここで は SQL コマンドのキーでもあり、通常はテーブル ヘッダー = その列を見つけるための列名です
4. トランザクション
データベースにアクセスして更新するプログラムの実行単位。実行されたコマンドをトランザクションと呼ぶことができます
トランザクションの実行:
conn.commit() トランザクションを正常に終了します conn.rollback() トランザクションを異常終了し、プログラム実行単位での継続動作にエラーが発生した場合、以前の動作に戻します。
簡単な操作プロセス: 開始 → 接続の作成 → カーソルの取得 → プログラム実行ユニット → カーソルを閉じる → 接続を閉じる → 終了
2. 銀行振込システムのコードをシミュレートします
#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() #关闭链接
なぜなら、教育ビデオで使用されている IDE は MyEclipse で、最後にパラメーターを入力するために run.Configuration を使用し、pycharm を使用しているためです。つまり、私が愚かで見つからないか、実際には存在しません。
そこで、実行時にパラメータを入力するために raw_input() を使用することにしました
実際、sys.argv[ ] を理解しようと試みましたが、まだ明確に理解できません。
2. mysql_Exceptions.IntegrityError: (1062、「キー 'PRIMARY' のエントリ '7' が重複しています」)
このエラーは、挿入したいデータがデータベース内にすでに存在していることを意味します。独自のプログラムの操作に矛盾はありますか
3. テーブルの作成時または値の入力時に MySql エラーが発生しました: 1170-BLOB/TEXT の列 'name' がキーの長さのないキー仕様で使用されています
エラー メッセージは、BLOB です。または TEXT フィールドが指定されていないキー長を使用しています。 キー
解決策: 他の主キーを設定するか、データ形式を varchar に変更します
詳しい説明 URL: http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/
4. TypeError: 'post' はこの関数では無効なキーワード引数です
エラーの原因: TypeError: "post" はこの関数では無効なパラメータです
この質問はあまりにも間違っており、私は言葉を失いました。 "post"=' 3306' の代わりに "port"=3306 と書きました
5, 1054, "Unknown columns 'acctid' in 'where 句'
エラーの原因: "acctid" 列がwhere句
あはは、前回の間違いで頭の中の水分が抜けていないです...
さらに、もう一つ間違いがあります、それは控除の手入力です。受取人が文字または漢字に設定されている場合、検索できません
テーブル作成時のコードまたはデータベースが原因である可能性があります。設定の問題は、私が文字変換とデータベースに関してまだ初心者であることを意味します。ファイティング!
7. MySQL データベースを起動します
コンピューター→右クリック→管理→サービスとアプリケーション→サービス→MySQL を右クリック→開始
4.具体的な実行表示
1.データベースの tr_money テーブル
2. コードを実行し、減算者、受取人、送金金額を入力して
3 を実行すると、結果はコード内に特別に出力された操作プロセス表示になります
4. 実行後のデータベース tr_money テーブルのステータス
概要
以上がMySQL を操作して銀行振込操作をシミュレートする Python の簡単な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。