python連接MySQL數據庫搭建簡易博客

實現功能大概

?

?

將python和MySQL數據庫交互進行 封裝 ---》》utils.py

文件程序 ----》blog.py

?

# -*- coding: utf-8 -*-
# @Time    : 2019/08/30 15:33
# @Author  : Liu
# @File    : utils.pyimport pymysql
import hashlibclass dbHelper:def __init__(self, host, user, password, port, database):self.host = hostself.user = userself.password = passwordself.port = portself.database = databasedef connect(self):self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, port=self.port,database=self.database)self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)# 關閉def close(self):self.cursor.close()self.conn.close()# 封裝增刪改def __oper(self, sql, params):row = 0try:self.connect()row = self.cursor.execute(sql, params)self.conn.commit()self.close()except Exception as e:print(e)return rowdef insert(self, sql, params=[]):return self.__oper(sql, params)def delete(self, sql, params=[]):return self.__oper(sql, params)def update(self, sql, params=[]):return self.__oper(sql, params)def find_one(self, sql, params=[]):data = Nonetry:self.connect()self.cursor.execute(sql, params)data = self.cursor.fetchone()self.close()except Exception as e:print(e)return datadef find_all(self, sql, params=[]):# try:self.connect()self.cursor.execute(sql, params)datas = self.cursor.fetchall()self.close()# except Exception as e:#     print(e)return datasdef secret_sha256(self,password):sha256 = hashlib.sha256()sha256.update(password.encode('utf-8'))password = sha256.hexdigest()return password

blog.py

# -*- coding: utf-8 -*-
# @Time    : 2019/08/30 17:18
# @Author  : Liu
# @File    : blog.py
from utils import dbHelper
from datetime import date
from datetime import datetime# 創建數據庫工具類對象
db = dbHelper(host='10.0.102.54', user='root', password='root', port=3306, database='blog')#登陸while True:choice = input('請選擇:1.登陸 2.注冊 3.發表博客 4.退出登陸 5.瀏覽文章 6. 查看全部用戶文章 7.忘記密碼 ')if choice == '1':username = input('用戶名:')password = input('密碼:')if username and password:# 數據庫查詢sql = 'select * from user where username=%s'data = db.find_one(sql, (username,))  # {'id':1,'username':'admin','password':'....',...}if data:# 此人注冊過db_password = data.get('password')password = db.secret_sha256(password)if password == db_password:sql = 'update user set islogin=1 where id=%s'db.update(sql, (data.get('id'),))print('用戶登錄成功!')else:print('用戶名或者密碼有誤!')else:print('輸入的用戶名有誤!')else:print('輸入不能為空')#注冊elif choice == '2':# 注冊username = input('用戶名:')password = input('密碼:')repassword = input('確認密碼:')phone = input('手機號碼:')email = input('郵箱:')# 查詢if username:sql = 'select * from user where username=%s or phone=%s or email=%s'data = db.find_one(sql, params=(username, phone, email))# print('1')if data:print('此用戶名或者手機號碼或者郵箱已被占用!')else:# 注冊if password and repassword:if password == repassword:# print('2')password = db.secret_sha256(password)sql = 'insert into user(username,password,phone,email,rdate) values(%s,%s,%s,%s,%s)'row = db.insert(sql, (username, password, phone, email, date.today()))if row:print('注冊成功!')else:print('注冊失敗!')else:print('兩次密碼不一致!')else:print('密碼不能為空~')else:print('用戶名不能為空!')#發表博客elif choice == '3':# 發表文章username = input('用戶名:')if username:# 數據庫查詢sql = 'select * from user where username=%s'data = db.find_one(sql, (username,))  # {'id':1,'username':'admin','password':'....',...}if data:islogin = data.get('islogin')if islogin:# 發表文章title = input('請輸入文章標題:')content = input('輸入內容:')# 構建sqlsql = 'insert into blog(title,content,pdate,uid) values(%s,%s,%s,%s)'row = db.insert(sql, (title, content, datetime.now(), data.get('id')))if row:print(username + '發表文章成功')else:print('文章發表失敗!')else:print('此用戶還沒有登陸,請登陸....')else:print('用戶名有誤!')#退出登陸elif choice == '4':# 退出登陸username = input('用戶名:')if username:# 數據庫查詢sql = 'select * from user where username=%s'data = db.find_one(sql, (username,))  # {'id':1,'username':'admin','password':'....',...}if data:sql = 'update user set islogin=0 where id=%s'row = db.update(sql, (data.get('id'),))if row:print(username + '成功退出!')breakelse:print('退出失敗!')else:print('輸入的用戶名有誤!')else:print('用戶名不能為空!')#瀏覽自己的文章elif choice == '5':username = input('用戶名:')if username:# 數據庫查詢sql = 'select * from user where username=%s'data = db.find_one(sql, (username,))  # {'id':1,'username':'admin','password':'....',...}if data:islogin = data.get('islogin')if islogin:# 瀏覽文章# 構建sqluid = data.get('id')sql = 'select title,content from blog where uid=%s'# print(sql)content = db.find_one(sql,(uid,))print('標題為:'+ content.get('title'))print('內容為:'+ content.get('content'))# print(content)else:print('此用戶還沒有登陸,請登陸....')else:print('用戶名有誤!')#查看所有用戶文章elif choice == '6':username = input('用戶名:')if username:# 數據庫查詢sql = 'select * from user 'data = db.find_all(sql,)  # {'id':1,'username':'admin','password':'....',...}print(data)if data:sql = 'select title,content from blog'# print(sql)content = db.find_all(sql,)print(content)i = len(content)print(i-1)for i in  range(i):print('標題為:'+ content[i].get('title'))print('內容為:'+ content[i].get('content'))print('--------------------------------------')i+=1# print(content)else:print(' 查詢失敗')#忘記密碼elif choice == '7':# 忘記用戶名username = input('輸入忘記密碼的用戶名:')if username:# 數據庫查詢sql = 'select * from user where username=%s'data = db.find_one(sql, (username,))  # {'id':1,'username':'admin','password':'....',...}if data:islogin = data.get('islogin')if islogin:# 登陸可直接修改密碼newpassword = input('請輸入新的用戶密碼')newpassword =db.secret_sha256(newpassword)# 構建sql#  update 表名 set 字段1=值1,字段2=值2... where 條件  #不加where修改的是所有的記錄sql = 'update  user set password =%s where username= %s 'row = db.insert(sql, (newpassword,username,))if row:print(username + '密碼修改成功')else:print('修改失敗!')else:print('此用戶還沒有登陸,請登陸修改密碼....')else:print('無此用戶!')else:print('輸入錯誤!')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用Sqoop在數據庫和Hive、HDFS之間做ETL操作

文章目錄[toc] 目錄:一、利用Sqoop,從Oracle到HDFS二、利用Sqoop,從Oracle到Hive三、遇到的問題目錄: 一、利用Sqoop,從Oracle到HDFS 第一步:把Oracle驅動拷貝到Sqoop安裝路徑中的lib文件夾下。 第二步&…

跨地域的VPC私網互通【高速通道案例】

最近一家大型企業正在將業務遷移至阿里云平臺,用戶有深圳,北京,上海等分支,其中上海為總部,用戶要求在阿里云上的華南1,華北2,華東2分別建立VPC網絡,其中華南1,華北2要與…

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid1711 這道題就是一個KMP模板。 1 #include<iostream> 2 #include<cstring>3 using namespace std;4 5 const int maxn 10000005;6 7 int n,m;8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13…

Redis數據庫學習筆記

一、NoSql&#xff08;非關系型數據庫&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非關系型數據庫 ? NoSQL&#xff0c;泛指非關系型的數據庫。隨著互聯網web2.0網站的興起&#xff0c;傳統的關系數據庫在應付web2.0網站&#xff0c;特別是超大規模和高并發的SNS類型…

Sqoop的安裝配置及工作機制

文章目錄[toc] 目錄&#xff1a;1、簡介2、sqoop安裝2.1、下載并解壓2.2、修改配置文件2.3、加入mysql或oracle的jdbc驅動包2.4、驗證啟動3、Sqoop的原理3.1、代碼定制目錄&#xff1a; 1、簡介 sqoop是apache旗下一款“Hadoop和關系數據庫服務器之間傳送數據”的工具。 導入…

3D打印技術在醫療領域能做些什么?幫助精確完成手術

3D打印技術出現在20世紀90年代中期。它與普通打印工作原理基本相同&#xff0c;打印機內裝有液體或粉末等“打印材料”&#xff0c;與電腦連接后&#xff0c;通過電腦控制把“打印材料”一層層疊加起來&#xff0c;最終把計算機上的藍圖變成實物。這打印技術稱為3D立體打印技術…

【一些簡單的jQuery選擇器】

學習【js DOM 編程藝術】&#xff0c;最后面有許多jQuery的選擇器&#xff0c;每個都動手敲了一遍。 jQuery 提供了高級選擇器的方法。 js獲取元素的三個基本方法分別是通過標簽名&#xff0c;類名和id&#xff0c;即(getElementsByTagName, getElementsByClassName和getElemen…

pymysql操作mysql數據庫

一、pymysql操作mysql數據庫 安裝pymysql pip install pymysql 1.1 pymysql操作數據庫的五行拳 連接數據庫 使用Connect方法連接數據庫 pymysql.Connections.Connection(hostNone, userNone, password, databaseNone, port0, charset) 參數說明&#xff1a;host – 數據庫服務…

SecureCRT常用的使用技巧

文章目錄前言&#xff1a;1、SecureCRT 超時自動斷開連接的解決辦法2、SecureCRT連接Linux時&#xff0c;終端顯示亂碼的問題。3、SecureCRT使用自動記錄日志功能4、使用SecureCRT從Windows上傳文件到Linux5、SecureCRT配色推薦和永久設置前言&#xff1a; 由于工作需要&#…

解決:(1062, Duplicate entry '2019-08-30' for key 'rdate')

解決(1062, "Duplicate entry 2019-08-30 for key rdate") 顯然這個問題是因為插入重復主鍵導致從庫不工作了&#xff0c;更改庫的唯一限制&#xff1a; unique 為normal 或者刪除unique ALTER TABLE 表明 DROP INDEX 字節名; 實例 CREATE TABLE good_booked (au…

人民幣數字金額轉大寫金額

public class t {public static String Trans2RMB(String money) {int index money.indexOf(".");if (index < 0) {// 沒有角分money money ".00";index money.indexOf(".");}if (money.substring(index, money.length()).length() < …

eventBus 與fragment

同一個eventbut是不可以注冊兩次的&#xff0c;所以我們會在ondestroy方法中進行unregister&#xff08;&#xff09; 但是在fragment中&#xff0c;最好把unregister&#xff08;&#xff09;方法寫到 onDestroyView&#xff08;&#xff09;方法中而不是onDestrory&#xff0…

機器學習之線性代數總結

目錄1、SVD是什么、表達式是什么及對應的數學含義&#xff1b;2、了解方陣、行列式的含義&#xff08;方陣即矩陣&#xff0c;行列式即矩陣的計算結果&#xff09;3、了解代數余子式的概念4、伴隨矩陣的概念5、知道方陣的逆的公式、范德蒙行列式6、知道矩陣的乘法&#xff0c;掌…

Python操作MongoDB

一 安裝 pymongo pip install pymongo3.4 ? 導入 MongoClient from pymongo import MongoClient 二 連接MongoDB數據庫 MongoDB端口號:27017 連接MongoDB我們需要使用PyMongo庫里面的MongoClient&#xff0c;一般來說傳入MongoDB的IP及端口即可&#xff0c;第一個參數為地…

各種插件

上下滾動抽獎效果, 移動端省級聯動, 時間聯動 , pc端省級聯動 vue 支持各種方式上傳 一個不太完善的拖拽排序 react 拖拽交換插件 各種小插件 壓縮圖片移動端 h5上傳 h5分片上傳 包括服務器 slideSuper 各種滑動效果 wow.js 轉載于:https://www.cnblogs.com/dhsz/p/6377956.h…

MailBee.NET Objects發送電子郵件(SMTP)教程六:創建并發送帶有附件的郵件

2019獨角獸企業重金招聘Python工程師標準>>> MailBee.NET Objects是一款為創建、發送、接收以及處理電子郵件而設計的健壯、功能豐富的.NET控件。幾行代碼便可為應用程序添加E-Mail支持&#xff0c;簡單高效。具備“必需”以及獨特的功能&#xff0c;這些控件幫助開…

機器學習之凸優化原理推導及相關知識總結

文章目錄目錄1、了解凸集和仿射集的基本概念。2、知道幾何體的向量表達。3、了解超平面和半空間的概念。4、了解分割超平面和支撐超平面的含義。5、知道jensen不等式。6、掌握知識&#xff1a;凸函數。7、掌握凸優化目錄 1、了解凸集和仿射集的基本概念。 凸集&#xff1a;在…

jQuery BreakingNews 間歇滾動

BreakingNews 是一款基于jQuery的間歇滾動插件。它可以設置標題、標題顏色、標題背景顏色、鏈接顏色、字體大小、邊框、寬度、自動滾動、間歇時間等等&#xff0c;同時它還好提供兩種過度方式——淡入淡出&#xff08;fade&#xff09;和向上滑動&#xff08;slide&#xff09;…

機器學習之回歸總結

目錄1、了解線性回歸2、了解似然函數3、了解交叉驗證的原理4、梯度下降算法4.1、批量梯度下降算法&#xff08;Batch Gradient Descent&#xff0c;簡稱BGD&#xff09;&#xff1a;4.2、隨機梯度下降算法&#xff08;SGD&#xff09;&#xff1a;4.3、折中&#xff1a; 5、了解…

html中的url、href、src的區別

url不是屬性&#xff0c;src和href是屬性&#xff0c;src用于替換當前元素&#xff0c;href用于在當前文檔和引用資源之間確立聯系&#xff0c;也就是說src引用的路徑是img自己的路徑&#xff0c;href引用的路徑是要跳轉到的地方。 URL&#xff1a;Uniform Resource Locators&…