前几天是课程中的MySQL部分,就没有更新,到了与python交互的部分,有必要做一下记录。
今日关键词:python数据库
接下来看代码:
#coding=utf-8
# 因为是python2.7版本,所以必须要进行编码
# 导入MySQLdb包中的全部
from MySQLdb import *
try:
# 在这里建立和数据库的连接
conn = connect(host='localhost', port=3306, user='root', passwd='123456',db='practice', charset='utf8')
#创建cursor用来操作数据库对象
cursor1 = conn.cursor()
# 构造sql语句
sql = 'insert into students(name) values("神秘人")'
# 调用cursor对象中的execute方法来执行sql语句
cursor1.execute(sql)
# 让事件生效
conn.commit()
# 关闭cursor和conn
cursor1.close()
conn.close()
except Exception, e:
print(e.message)
上面这段代码是python2.7写的,因为没有找到关于mysql模块的3.x版本。
代码的含义注释写的很清楚。这里进行了数据库的插入操作,查询操作类似,不过这一次我们把它封装起来,看下面的代码
# coding=utf-8
from MySQLdb import *
class MysqlHelper(object):
def __init__(self, host, port, user, passwd, db, charset='utf8'):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.db = db
self.charset = charset
def open(self):
self.conn = connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,
charset=self.charset)
self.cursor = r = self.conn.cursor()
def close(self):
self.cursor.close()
self.conn.close()
# 定义一个方法进行change|update|delete操作
def cud(self, sql, params):
try:
self.open()
self.cursor.execute(sql, params)
self.conn.commit()
self.close()
print("执行完毕")
except Exception, e:
print(e.message)
# 定义一个方法进行查询操作
def all(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
except Exception, e:
print(e.message)
execute方法中的第二个参数是一个列表,列表中是sql语句找中替换%s的部分,这里是为了防止例如单引号之类的字符录对数据库造成的影响,sql语句中的%s代表的是任意的参数。
我们接下来调用这个模块
用户登录:
# coding=utf-8
from mysqlserver import MysqlHelper
from hashlib import sha1
# 接收用户名和密码
username = raw_input("请输入用户名:")
passwd = raw_input("请输入密码:")
# sha1加密
s1 = sha1()
s1.update(passwd)
new_pwd = s1.hexdigest()
# print new_pwd
sql = "select passwd from client where username=%s"
# 创建数据库对象
helper = MysqlHelper('localhost', 3306, 'root', '123456', 'newuse')
result = helper.all(sql,[username])
if len(result) == 0:
print "用户名不存在"
elif result[0][0] == new_pwd:
print "登录成功"
else:
print "密码错误"
用户注册:
# coding=utf-8
from mysqlserver import MysqlHelper
import hashlib
def hashopt(pwd):
s1 = hashlib.sha1()
s1.update(pwd)
result = s1.hexdigest()
return result
def register(helper, sql_judge, client):
while True:
name = raw_input("请输入注册的用户名:")
judge_result = helper.all(sql_judge, [name])
if len(judge_result) != 0:
print "用户名已存在,请重新输入"
else:
while True:
pwd1 = raw_input("请输入密码:")
pwd2 = raw_input("请再次输入密码:")
if pwd1 == pwd2:
client['name'] = name
new_pwd = hashopt(pwd1)
client['passwd'] = new_pwd
return
else:
print "两次密码输入不一致."
def main():
helper = MysqlHelper('localhost', 3306, 'root', '123456', 'newuse')
sql_judge = "select * from client where username=%s"
client = dict()
register(helper, sql_judge, client)
# print client
# 构造sql语句
sql_signin = "insert into client(username,passwd) values(%s,%s)"
helper.cud(sql_signin, [client['name'], client['passwd']])
print "注册成功"
#判断用户名是否存在
if __name__ == "__main__":
main()
在这里我们使用了hashlib模块中的sha1加密。
其实python与mysql交互很简单,就那么几个函数。