2018-08-05python中应用Mysql数据库
2018-08-05 本文已影响28人
菩灵
与Python进行交互:
注意点:如果只知道一个最大值,就用varchar(),如果知道确定的值,首选char()
加密:sha1加密不管密码位数多少,最后都是40位字符。
封装数据库的操作类:
代码奉上(基于Python2):
#文件名:Helper.py
#coding=utf-8
from MySQLdb import *
class MysqlHelper(object):
def __init__(self, host="localhost", port=3306, db="python3", user="root", passwd="mysql", charset="utf8"):
self.conn = connect(host=host,port=port,db=db,user=user,passwd=passwd,charset=charset)
def insert(self,sql,params):
return self.__cud(sql,params)
def update(self,sql, params):
return self.__cud(sql,params)
def delete(self,sql,params):
return self.__cud(sql.params)
def __cud(self,sql,params=[]):
try:
cs1=self.conn.cursor()
rows=cs1.execute(sql,params)
self.conn.commit()
cs1.close()
self.conn.close()
return rows
except Exception,e:
print(e.message)
self.conn.rollback()
def fetchone(self,sql,params=[]):
try:
cs1=self.conn.cursor()
cs1.execute(sql,params)
row=cs1.fetchone()
return row
except Exception,e:
print(e.message)
self.conn.rollback()
def fetchall(self,sql,params=[]):
try:
cs1=self.conn.cursor()
cs1.execute(sql.params)
rows=cs1.fetchall()
cs1.close()
self.conn.close()
return rows
except Exception,e:
print(e.message)
实际应用代码:
# 文件名:usertest.py
#coding=utf-8
from Helper import MysqlHelper
from hashlib import sha1
#注册
# name1 = raw_input("请输入用户名:")
# pwd = raw_input("请输入密码:")
#
# s1=sha1()
# s1.update(pwd)
# pwd2 = s1.hexdigest()
#
# sql = "insert into users(name,passwd) values(%s,%s)"
# params = [name1,pwd2]
#
# helper = MysqlHelper()
# row = helper.insert(sql,params)
# print row
#登录
name1 = raw_input("请输入用户名:")
pwd = raw_input("请输入密码:")
s1 = sha1()
s1.update(pwd)
pwd2 = s1.hexdigest()
sql = "select passwd from users where name=%s"
params = [name1]
helper = MysqlHelper()
result = helper.fetchone(sql,params)
if result == None:
print "用户名错误"
elif result[0] == pwd2:
print "登录成功"
else:
print "密码错误"
数据库创建:
use python3;
show tables;
create table users(
id int auto_increment primary key not null;
name varchar(20);
passwd char(40));
insert into users(name,passwd) values("abc","asjfoa203974jfaw592342"),(123,20340285283),("fje2304",2394755);
创建的时候遇到点问题,设定为varchar和char的字段,插入的时候用int和float也没有报错;研究发现,MySQL中varchar和char是可以接收int和float的。
varchar和char的区别:
Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。
由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!