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之类的函数把两边的空格去掉!

上一篇下一篇

猜你喜欢

热点阅读