在操做数据库的时候,python2中通常使用mysqldb,但在python3中已经不在支持mysqldb了,咱们能够用pymysql和mysql.connector。本文的全部操做都是在python3的pymysql下完成的。python
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test') cur = conn.cursor() # 查询 sql = "select * from info" reCount = cur.execute(sql) # 返回受影响的行数 print(reCount) data = cur.fetchall() # 返回数据,返回的是tuple类型 print(data) """ ((1, 'mj', 'tokyo'), (2, 'alex', 'newyork'), (3, 'tommy', 'beijing')) """ cur.close() conn.close()
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test') cur = conn.cursor() # 插入数据 sql2 = "insert into info(NAME,address ) VALUES(%s,%s)" # sql语句,%s是占位符(%s是惟一的,不论什么数据类型都使用%s)用来防止sql注入 params = ('eric', 'wuhan') # 参数 reCount = cur.execute(sql2, params) # 批量插入 li = [('a1', 'b1'), ('a2', 'b2')] sql3 = 'insert into info(NAME ,address) VALUES (%s,%s)' reCount = cur.executemany(sql3, li) conn.commit() # 提交,执行多条命令只须要commit一次就好了 cur.close() conn.close()
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test') # cur = conn.cursor() cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立cursor的时候,指定1其返回的cursor类型为dict # 查询 sql = "select * from info" reCount = cur.execute(sql) # 返回受影响的行数 print(reCount) data = cur.fetchall() # 返回数据,返回的是tuple类型 print(data) cur.close() conn.close() """ [{'address': 'tokyo', 'name': 'mj', 'id': 1}, {'address': 'newyork', 'name': 'alex', 'id': 2}, {'address': 'beijing', 'name': 'tommy', 'id': 3}] """
经过cur.lastrowid来获取自增idmysql
# 插入数据 sql = "insert into info(NAME,address ) VALUES(%s,%s)" params = ('eric', '/usr/bin/a.txt') reCount = cur.execute(sql, params) conn.commit() new_id = cur.lastrowid #获取自增id,提交完以后才能取到值 print(new_id)
使用fechone来逐条获取数据sql
data = cur.fetchone() print(data) data = cur.fetchone() print(data) data = cur.fetchone() print(data) """ (1, 'mj', 'tokyo') (2, 'alex', 'newyork') (3, 'tommy', 'beijing') """
cur.scroll(0,mode='absolute')
data = cur.fetchone() print(data) cur.scroll(0,mode='absolute') data = cur.fetchone() print(data) data = cur.fetchone() print(data) """ (1, 'mj', 'tokyo') (1, 'mj', 'tokyo') (2, 'alex', 'newyork') """
cur.scroll(-1,mode='relative')
data = cur.fetchone() print(data) data = cur.fetchone() print(data) cur.scroll(-1,mode='relative') data = cur.fetchone() print(data) """ (1, 'mj', 'tokyo') (2, 'alex', 'newyork') (2, 'alex', 'newyork') """
这里简单实现一个用户登陆的功能,以便对整个业务结构有一个总体的认识。数据库
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from model.admin import Admin def main(): usr = input("username:") pwd = input("password:") admin = Admin() result = admin.CheckValidate(usr, pwd) if not result: # 通常会把简单的逻辑放在上面,复杂的逻辑放下面 print("登陆失败!") else: print("登录成功!进入后台管理界面..") if __name__ == "__main__": main()
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from utility.sql_helper import MySqlHelper class Admin(): def __init__(self): self.__helper = MySqlHelper() def CheckValidate(self,username,password): sql = "select * from admin where username=%s and password=%s" params=(username,password) return self.__helper.getOne(sql,params)
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import pymysql import conf class MySqlHelper(object): def __init__(self): self.__conn_dict = conf.conn_dict # 把数据库链接信心提取到conf中 def getDict(self, sql, params): conn = pymysql.connect(**self.__conn_dict) cur = conn.cursor(cursor=pymysql.cursors.DictCursor) cur.execute(sql, params) data = cur.fetchall() cur.close() conn.close() return data def getOne(self, sql, params): conn = pymysql.connect(**self.__conn_dict) # 加**后表示传入的是字典里的数据,不然报错 cur = conn.cursor(cursor=pymysql.cursors.DictCursor) cur.execute(sql, params) data = cur.fetchone() cur.close() conn.close() return data
#!/usr/bin/env python3 # -*- coding:utf-8 -*- conn_dict = dict(host='127.0.0.1', user='root', passwd='root', db='test')