在操做數據庫的時候,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')