欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用pymysql實(shí)現(xiàn)操作mysql

 更新時(shí)間:2016年09月13日 10:08:27   作者:W-Kr  
本文給大家講解的是在python中使用pymysql實(shí)現(xiàn)操作mysql的方法匯總,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下

pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。

適用環(huán)境

python版本 >=2.6或3.3

mysql版本>=4.1

安裝

可以使用pip安裝也可以手動(dòng)下載安裝。

使用pip安裝,在命令行執(zhí)行如下命令:

pip install PyMySQL

手動(dòng)安裝,請(qǐng)先下載。下載地址:https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X。

其中的X.X是版本(目前可以獲取的最新版本是0.6.6)。

下載后解壓壓縮包。在命令行中進(jìn)入解壓后的目錄,執(zhí)行如下的指令:

python setup.py install

建議使用pip安裝。

使用示例

連接數(shù)據(jù)庫如下:

import pymysql.cursors
 
# Connect to the database
connection = pymysql.connect(host='127.0.0.1',
               port=3306,
               user='root',
               password='zhyea.com',
               db='employees',
               charset='utf8mb4',
               cursorclass=pymysql.cursors.DictCursor)
 

也可以使用字典進(jìn)行連接參數(shù)的管理,我覺得這樣子更優(yōu)雅一些:

import pymysql.cursors
 
config = {
     'host':'127.0.0.1',
     'port':3306,
     'user':'root',
     'password':'zhyea.com',
     'db':'employees',
     'charset':'utf8mb4',
     'cursorclass':pymysql.cursors.DictCursor,
     }
 
# Connect to the database
connection = pymysql.connect(**config)

插入數(shù)據(jù):

執(zhí)行sql語句前需要獲取cursor,因?yàn)榕渲媚J(rèn)自動(dòng)提交,故在執(zhí)行sql語句后需要主動(dòng)commit,最后不要忘記關(guān)閉連接:

from datetime import date, datetime, timedelta
import pymysql.cursors
 
#連接配置信息
config = {
     'host':'127.0.0.1',
     'port':3306,
     'user':'root',
     'password':'zhyea.com',
     'db':'employees',
     'charset':'utf8mb4',
     'cursorclass':pymysql.cursors.DictCursor,
     }
# 創(chuàng)建連接
connection = pymysql.connect(**config)
 
# 獲取明天的時(shí)間
tomorrow = datetime.now().date() + timedelta(days=1)
 
# 執(zhí)行sql語句
try:
  with connection.cursor() as cursor:
    # 執(zhí)行sql語句,插入記錄
    sql = 'INSERT INTO employees (first_name, last_name, hire_date, gender, birth_date) VALUES (%s, %s, %s, %s, %s)'
    cursor.execute(sql, ('Robin', 'Zhyea', tomorrow, 'M', date(1989, 6, 14)));
  # 沒有設(shè)置默認(rèn)自動(dòng)提交,需要主動(dòng)提交,以保存所執(zhí)行的語句
  connection.commit()
 
finally:
  connection.close();

執(zhí)行查詢:

import datetime
import pymysql.cursors
 
#連接配置信息
config = {
     'host':'127.0.0.1',
     'port':3306,
     'user':'root',
     'password':'zhyea.com',
     'db':'employees',
     'charset':'utf8mb4',
     'cursorclass':pymysql.cursors.DictCursor,
     }
# 創(chuàng)建連接
connection = pymysql.connect(**config)
 
# 獲取雇傭日期
hire_start = datetime.date(1999, 1, 1)
hire_end = datetime.date(2016, 12, 31)
 
# 執(zhí)行sql語句
try:
  with connection.cursor() as cursor:
    # 執(zhí)行sql語句,進(jìn)行查詢
    sql = 'SELECT first_name, last_name, hire_date FROM employees WHERE hire_date BETWEEN %s AND %s'
    cursor.execute(sql, (hire_start, hire_end))
    # 獲取查詢結(jié)果
    result = cursor.fetchone()
    print(result)
  # 沒有設(shè)置默認(rèn)自動(dòng)提交,需要主動(dòng)提交,以保存所執(zhí)行的語句
  connection.commit()
 
finally:
  connection.close();

這里的查詢支取了一條查詢結(jié)果,查詢結(jié)果以字典的形式返回:

從結(jié)果集中獲取指定數(shù)目的記錄,可以使用fetchmany方法:

result = cursor.fetchmany(2)

不過不建議這樣使用,最好在sql語句中設(shè)置查詢的記錄總數(shù)。

獲取全部結(jié)果集可以使用fetchall方法:

result = cursor.fetchall()

因?yàn)橹挥袃蓷l記錄,所以上面提到的這兩種查詢方式查到的結(jié)果是一樣的:

復(fù)制代碼 代碼如下:

[{'last_name': 'Vanderkelen', 'hire_date': datetime.date(2015, 8, 12), 'first_name': 'Geert'}, {'last_name': 'Zhyea', 'hire_date': datetime.date(2015, 8, 21), 'first_name': 'Robin'}]

在django中使用

在django中使用是我找這個(gè)的最初目的。目前同時(shí)支持python3.4、django1.8的數(shù)據(jù)庫backend并不好找。這個(gè)是我目前找到的最好用的。

設(shè)置DATABASES和官方推薦使用的MySQLdb的設(shè)置沒什么區(qū)別:

DATABASES = {
   'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mytest',
        'USER': 'root',
        'PASSWORD': 'zhyea.com',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
 

關(guān)鍵是這里:我們還需要在站點(diǎn)的__init__.py文件中添加如下的內(nèi)容:

import pymysql
pymysql.install_as_MySQLdb()

最后給大家附上pymysql實(shí)現(xiàn)增刪改查的代碼,希望大家能夠喜歡

#!/usr/bin/python
#coding:gbk
import pymysql
from builtins import int

#將MysqlHelper的幾個(gè)函數(shù)寫出來

def connDB():               #連接數(shù)據(jù)庫
  conn=pymysql.connect(host="localhost",user="root",passwd="zx69728537",db="student");
  cur=conn.cursor();
  return (conn,cur);

def exeUpdate(conn,cur,sql):        #更新或插入操作
  sta=cur.execute(sql);
  conn.commit();
  return (sta);

def exeDelete(conn,cur,IDs):        #刪除操作
  sta=0;
  for eachID in IDs.split(' '):
    sta+=cur.execute("delete from students where Id=%d"%(int(eachID)));
  conn.commit();
  return (sta);
    
def exeQuery(cur,sql):           #查找操作
  cur.execute(sql);
  return (cur);
  
def connClose(conn,cur):          #關(guān)閉連接,釋放資源
  cur.close();
  conn.close();

result=True;
print("請(qǐng)選擇以上四個(gè)操作:1、修改記錄,2、增加記錄,3、查詢記錄,4、刪除記錄.(按q為退出)");
conn,cur=connDB();
number=input();
while(result):
  if(number=='q'):
    print("結(jié)束操作");
    break;
  elif(int(number)==1):
    sql=input("請(qǐng)輸入更新語句:");
    try:
      exeUpdate(conn, cur, sql);
      print("更新成功");
    except Exception:
      print("更新失敗");
      raise;
  elif(int(number)==2):
      sql=input("請(qǐng)輸入新增語句:");
      try:
        exeUpdate(conn, cur, sql);
        print("新增成功");
      except Exception:
        print("新增失敗");
        raise;
  elif(int(number)==3):
    sql=input("請(qǐng)輸入查詢語句:");
    try:
      cur=exeQuery(cur, sql);
      for item in cur:
        print("Id="+str(item[0])+" name="+item[1]);
    except Exception:
      print("查詢出錯(cuò)");
      raise;
  elif(int(number)==4):
    Ids=input("請(qǐng)輸入Id,并用空格隔開");
    try:
      exeDelete(conn, cur, Ids);
      print("刪除成功");
    except Exception:
      print("刪除失敗");
      raise;
  else:
    print("非法輸入,將結(jié)束操作!");
    result=False;
    break;
  print("請(qǐng)選擇以上四個(gè)操作:1、修改記錄,2、增加記錄,3、查詢記錄,4、刪除記錄.(按q為退出)");
  number=input("請(qǐng)選擇操作");

相關(guān)文章

  • 用Python逐行分析文件方法

    用Python逐行分析文件方法

    在本篇文章里我們給大家分享了關(guān)于用Python逐行分析文件方法知識(shí)點(diǎn),有需要的朋友們跟著學(xué)習(xí)下。
    2019-01-01
  • 如何利用pandas工具輸出每行的索引值、及其對(duì)應(yīng)的行數(shù)據(jù)

    如何利用pandas工具輸出每行的索引值、及其對(duì)應(yīng)的行數(shù)據(jù)

    這篇文章主要介紹了如何利用pandas工具輸出每行的索引值、及其對(duì)應(yīng)的行數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Flask入門教程實(shí)例:搭建一個(gè)靜態(tài)博客

    Flask入門教程實(shí)例:搭建一個(gè)靜態(tài)博客

    這篇文章主要介紹了Flask入門教程實(shí)例:搭建一個(gè)靜態(tài)博客,本文主要介紹flask框架的環(huán)境配置以及一個(gè)靜態(tài)博客胡搭建實(shí)例,需要的朋友可以參考下
    2015-03-03
  • Python讀取Excel的方法實(shí)例分析

    Python讀取Excel的方法實(shí)例分析

    這篇文章主要介紹了Python讀取Excel的方法,實(shí)例分析了Python操作Excel文件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python中非常實(shí)用的一些功能和函數(shù)分享

    Python中非常實(shí)用的一些功能和函數(shù)分享

    這篇文章主要介紹了Python中非常實(shí)用的一些功能和函數(shù)分享,本文講解了帶任意數(shù)量參數(shù)的函數(shù)、使用Glob()查找文件、調(diào)試、生成唯一ID等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • python用函數(shù)創(chuàng)造字典的實(shí)例講解

    python用函數(shù)創(chuàng)造字典的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python用函數(shù)創(chuàng)造字典的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-06-06
  • Python中SQLite數(shù)據(jù)庫的使用

    Python中SQLite數(shù)據(jù)庫的使用

    SQLite是一種輕型關(guān)系型數(shù)據(jù)庫,常用于嵌入式設(shè)備和移動(dòng)應(yīng)用中。Python中內(nèi)置了SQLite模塊,可用于連接和操作SQLite數(shù)據(jù)庫。通過Python SQLite模塊,可以方便地創(chuàng)建、查詢和修改數(shù)據(jù)庫中的數(shù)據(jù),支持事務(wù)處理和數(shù)據(jù)庫操作的原子性保證
    2023-04-04
  • Python JSON常用編解碼方法代碼實(shí)例

    Python JSON常用編解碼方法代碼實(shí)例

    這篇文章主要介紹了Python JSON常用編解碼方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python入門游戲之井字棋實(shí)例代碼

    python入門游戲之井字棋實(shí)例代碼

    python井字棋游戲雖然看上去非常簡(jiǎn)陋,但是卻非常值得學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于python入門游戲之井字棋的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Python?代碼智能感知類型標(biāo)注與特殊注釋詳解

    Python?代碼智能感知類型標(biāo)注與特殊注釋詳解

    這篇文章主要為大家介紹了Python?代碼智能感知類型標(biāo)注與特殊注釋詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論