MySQL(九)

来源:https://www.cnblogs.com/leecoffee/archive/2018/05/15/9039008.html
-Advertisement-
Play Games

封裝 觀察前面的文件發現,除了sql語句及參數不同,其它語句都是一樣的 創建MysqlHelper.py文件,定義類 添加 創建testInsertWrap.py文件,使用封裝好的幫助類完成插入操作 查詢一個 創建testGetOneWrap.py文件,使用封裝好的幫助類完成查詢最新一行數據操作 實 ...


封裝

  • 觀察前面的文件發現,除了sql語句及參數不同,其它語句都是一樣的
  • 創建MysqlHelper.py文件,定義類
#encoding=utf8
import MySQLdb

class MysqlHelper():
    def __init__(self,host,port,db,user,passwd,charset='utf8'):
        self.host=host
        self.port=port
        self.db=db
        self.user=user
        self.passwd=passwd
        self.charset=charset

    def connect(self):
        self.conn=MySQLdb.connect(host=self.host,port=self.port,db=self.db,user=self.user,passwd=self.passwd,charset=self.charset)
        self.cursor=self.conn.cursor()

    def close(self):
        self.cursor.close()
        self.conn.close()

    def get_one(self,sql,params=()):
        result=None
        try:
            self.connect()
            self.cursor.execute(sql, params)
            result = self.cursor.fetchone()
            self.close()
        except Exception, e:
            print e.message
        return result

    def get_all(self,sql,params=()):
        list=()
        try:
            self.connect()
            self.cursor.execute(sql,params)
            list=self.cursor.fetchall()
            self.close()
        except Exception,e:
            print e.message
        return list

    def insert(self,sql,params=()):
        return self.__edit(sql,params)

    def update(self, sql, params=()):
        return self.__edit(sql, params)

    def delete(self, sql, params=()):
        return self.__edit(sql, params)

    def __edit(self,sql,params):
        count=0
        try:
            self.connect()
            count=self.cursor.execute(sql,params)
            self.conn.commit()
            self.close()
        except Exception,e:
            print e.message
        return count

添加

  • 創建testInsertWrap.py文件,使用封裝好的幫助類完成插入操作
#encoding=utf8
from MysqlHelper import *

sql='insert into students(sname,gender) values(%s,%s)'
sname=raw_input("請輸入用戶名:")
gender=raw_input("請輸入性別,1為男,0為女")
params=[sname,bool(gender)]

mysqlHelper=MysqlHelper('localhost',3306,'test1','root','mysql')
count=mysqlHelper.insert(sql,params)
if count==1:
    print 'ok'
else:
    print 'error'

查詢一個

  • 創建testGetOneWrap.py文件,使用封裝好的幫助類完成查詢最新一行數據操作
#encoding=utf8
from MysqlHelper import *

sql='select sname,gender from students order by id desc'

helper=MysqlHelper('localhost',3306,'test1','root','mysql')
one=helper.get_one(sql)
print one

實例:用戶登錄

創建用戶表userinfos

  • 表結構如下
    • id
    • uname
    • upwd
    • isdelete
  • 註意:需要對密碼進行加密
  • 如果使用md5加密,則密碼包含32個字元
  • 如果使用sha1加密,則密碼包含40個字元,推薦使用這種方式
create table userinfos(
id int primary key auto_increment,
uname varchar(20),
upwd char(40),
isdelete bit default 0
);

加入測試數據

  • 插入如下數據,用戶名為123,密碼為123,這是sha1加密後的值
insert into userinfos values(0,'123','40bd001563085fc35165329ea1ff5c5ecbdbbeef',0);

接收輸入並驗證

  • 創建testLogin.py文件,引入hashlib模塊、MysqlHelper模塊
  • 接收輸入
  • 根據用戶名查詢,如果未查到則提示用戶名不存在
  • 如果查到則匹配密碼是否相等,如果相等則提示登錄成功
  • 如果不相等則提示密碼錯誤
#encoding=utf-8
from MysqlHelper import MysqlHelper
from hashlib import sha1

sname=raw_input("請輸入用戶名:")
spwd=raw_input("請輸入密碼:")

s1=sha1()
s1.update(spwd)
spwdSha1=s1.hexdigest()

sql="select upwd from userinfos where uname=%s"
params=[sname]

sqlhelper=MysqlHelper('localhost',3306,'test1','root','mysql')
userinfo=sqlhelper.get_one(sql,params)
if userinfo==None:
    print '用戶名錯誤'
elif userinfo[0]==spwdSha1:
    print '登錄成功'
else:
    print '密碼錯誤'

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、事件:addEventListener('click', function(){}或者方法名字) 可以添加多個處理器,語法: 對應的有removeEventListener()。 2、阻止表單預設行為: preventDefault();當在事件對象上調用該函數 3、阻止事件冒泡: stopPr ...
  • 閱讀目錄: 1. ELK Stack 簡介 2. 環境準備 3. 安裝 Elasticsearch 4. 安裝 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在開發分散式服務追蹤,使用 Spring Cloud Sleuth Zipkin + Stream + ...
  • 在整理模板方法之前,先來說點廢話吧。除了記錄學習總結,也來記錄一下生活吧。 我們公司的老闆在北京,老闆也會因為項目來公司,不過不是天天來。公司有個同事,只要老闆不在就天天遲到,而且一天比一天晚,經常來了公司沒多久,午飯的外賣就送到公司了。前幾天,外賣竟然比他還來的早(外賣11點半送到的),公司一個不 ...
  • 一、什麼是裝飾模式 裝飾模式(Decorator),動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。UML結構圖如下: 其中,Component是抽象構件,定義一個對象介面,可以給這些對象動態地添加職責;ConreteComponent定義一個具體對象,也可以給這個對象 ...
  • 剛畫出來的,裡邊配的騷詞出自本人,夠騷吧! ...
  • Java反射, 修改欄位值, 實例化對象, 繞過構造器來實例化對象 ...
  • 概述 分散式平臺的核心在於併發,容錯。 而 Elixir 的優勢正是在於對於併發和容錯的處理。 分散式模型 1. CSP(Communicating Sequential Process) 模型 :: 多個進程通過管道(channel)進行交互 2. Actor 模型 :: 每個進程管理自己的內部狀 ...
  • ava開源生鮮電商平臺-購物車模塊的設計與架構(源碼可下載) 說明:任何一個電商無論是B2C還是B2B都有一個購物車模塊,其中最重要的原因就是客戶需要的東西放在一起,形成一個購物清單,確認是否有問題,然後再進行下單與付款. 1. 購物車資料庫設計: 說明:業務需求: 1》購物車裡面應該存放,那個買家 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...