国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python數(shù)據(jù)庫操作 ---- pymysql教學(xué)

這篇具有很好參考價值的文章主要介紹了Python數(shù)據(jù)庫操作 ---- pymysql教學(xué)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前提準(zhǔn)備

安裝mysql

在使用pymysql的前提就是又一個mysql數(shù)據(jù)庫,這個數(shù)據(jù)庫可以是本地數(shù)據(jù)庫也可以是遠(yuǎn)程的數(shù)據(jù)庫,
mysql的安裝這里就不再贅述了,大家可以參考其他的模塊進(jìn)行安裝

安裝pymysql

pip install pymysql

連接數(shù)據(jù)庫


 import pymysql
# 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
# 創(chuàng)建數(shù)據(jù)庫的游標(biāo)
cursor = db.cursor()
#execute()方法并執(zhí)行 SQL 語句
cursor.execute("select version()")
# 讀取第一條數(shù)據(jù)
data = cursor.fetchone()
print(data)
# 關(guān)閉連接
db.close()

# 輸出:
# ('8.0.24',)

解釋:
在連接數(shù)據(jù)的時候需要指定相應(yīng)的參數(shù)

  • host 數(shù)據(jù)庫ip地址,如果是本地可以用localhost或127.0.0.1 如果是遠(yuǎn)程就需要指定正確的ip地址
  • user 用戶名
  • password 密碼
  • port 端口號 如果不指定就默認(rèn)是3306

cursor():獲取數(shù)據(jù)庫的操作游標(biāo)
execute() 執(zhí)行SQL語句,把要進(jìn)操作的內(nèi)容寫成SQL語句,
fetchone() 讀取一條數(shù)據(jù)
close() 斷開連接,釋放資源
“select version()” sql語句的執(zhí)行結(jié)果
pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql

創(chuàng)建數(shù)據(jù)庫

import pymysql
# 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost',user='root',password='123456')
# 創(chuàng)建數(shù)據(jù)庫的游標(biāo)
cursor = db.cursor()
# 創(chuàng)建數(shù)據(jù)庫spiders
cursor.execute("create database spiders")
# 關(guān)閉連接
db.close()

pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql
創(chuàng)建數(shù)據(jù)庫命令執(zhí)行一次就可以,后面我們在創(chuàng)建的數(shù)據(jù)庫中進(jìn)行其他的操作,如果創(chuàng)建的數(shù)據(jù)已經(jīng)存在程序會報錯"Can't create database 'spiders'; database exists"
拓展:

如果在創(chuàng)建數(shù)據(jù)庫的不能確認(rèn)數(shù)據(jù)庫是否存在,但是也不想在創(chuàng)建數(shù)據(jù)庫的時候發(fā)生報錯可以使用下列語句:create database if not exists dbname

創(chuàng)建數(shù)據(jù)表、

表必須創(chuàng)建在數(shù)據(jù)庫內(nèi),所以我們需要在連接數(shù)據(jù)庫以后,需要指定操作那個數(shù)據(jù)庫

import pymysql
# 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306,db='spiders')
# 創(chuàng)建數(shù)據(jù)庫的游標(biāo)
cursor = db.cursor()
sql = "create table if not exists students(id varchar(255) not null,name varchar(255) not null,age int not null,primary key (id))"
cursor.execute(sql)

db.close()

pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql
這次的在連接mysql的時候connect函數(shù)新增了一個參數(shù),db='spiders'指定我們要連接的數(shù)據(jù)庫,后面創(chuàng)建的表也會創(chuàng)建到當(dāng)前數(shù)據(jù)庫。

創(chuàng)建數(shù)據(jù)庫的sql語句是 "create table if not exists students(id varchar(255) not null,name varchar(255) not null,age int not null,primary key (id))"
創(chuàng)建的數(shù)據(jù)庫名為students,三列 id、nameage,都是非空,主鍵為id

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

import pymysql

db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
cursor = db.cursor()
id = '10005'
name = 'zhangsan'
age = '20'
#方式1
# sql = "insert into students(id,name,age) values('"+id+"','"+name+"','"+age+"')"
# cursor.execute(sql)
# 方式2
# sql = "insert into students(id,name,age) values('{}','{}','{}')".format(id,name,age)
# cursor.execute(sql)
# 方式3(推薦)
sql = "insert into students(id,name,age) values(%s,%s,%s)"
cursor.execute(sql,(id,name,age))
db.commit()
db.close()

通過三種sql語句的編寫形式我們能夠發(fā)現(xiàn)。方式3的最為簡潔,通過使用%s來進(jìn)行占位,然后再通過execute()函數(shù)將數(shù)據(jù)傳入sql語句中組成完整的sql語句。

在執(zhí)行execute()方法之后必須要commit()方法才能將數(shù)據(jù)插入到表中,這個設(shè)計到了事務(wù)的原子性問題,事務(wù)機(jī)制可以確保數(shù)據(jù)一致性,事務(wù)有4個屬性:原子性、一致性、隔離性、持久性。

屬性 描述
原子性 事務(wù)是一個不可分割的工作單位,事務(wù)中包括的操作要么都執(zhí)行,要么都不執(zhí)行
一致性 事務(wù)必須是數(shù)據(jù)庫中一個一致性狀態(tài)轉(zhuǎn)變到另一個一致性狀態(tài),一致性與原子性是密切相關(guān)的
隔離性 一個事務(wù)不能被其他事務(wù)干擾,即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)時隔離的,并發(fā)的各個事務(wù)之間不能相互干擾
持久性 持久性也稱永久性,指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的,接下來的其他操作或故障不應(yīng)該對其有任何影響

查詢數(shù)據(jù)

在數(shù)據(jù)庫操作的過程中使用最多的就是查詢操作

import pymysql

db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
try:
    sql = 'select * from students'
    cursor = db.cursor()
    cursor.execute(sql)
    d1 = cursor.fetchone()
    print("獲取一條數(shù)據(jù)",d1)
    all_d = cursor.fetchall()
    print("獲取所有數(shù)據(jù)",all_d)
    # sql = "insert into students(id,name,age) values('"+id+"','"+name+"','"+age+"')"
except:
    print("Error")
db.close()

數(shù)據(jù)庫中的數(shù)據(jù)
pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql
輸出:
pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql
通過結(jié)果我們能夠看到etchone()執(zhí)行正常,拿出了一條數(shù)據(jù),但是fetchall()明明是查詢所有,但是結(jié)果只有除了第一條之外的數(shù)據(jù),關(guān)于這個現(xiàn)象我們可以從游標(biāo)的角度來解釋,一開始游標(biāo)在第一行執(zhí)行etchone()之后游標(biāo)就跑到第二行,再執(zhí)行fetchall()的時候就從第二行開始查詢直至末尾。
可以簡單的理解etchone()查詢游標(biāo)所在的一行數(shù)據(jù),fetchall()查詢當(dāng)前游標(biāo)至結(jié)束的所有行數(shù)據(jù)。

使用where進(jìn)行條件查詢

查詢id大于10003的數(shù)據(jù)

import pymysql

db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
try:
    sql = 'select * from students where id>10003'
    cursor = db.cursor()
    cursor.execute(sql)
    all_d = cursor.fetchall()
    print("獲取所有數(shù)據(jù)",all_d)
    # sql = "insert into students(id,name,age) values('"+id+"','"+name+"','"+age+"')"
except:
    print("Error")
db.close()

輸出:
pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql

更新數(shù)據(jù)

跟新數(shù)據(jù),有時候我們再會對數(shù)據(jù)庫中原來的數(shù)據(jù)進(jìn)行修改

import pymysql

db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
try:
    sql = 'update students set name=%s where id=%s'
    cursor = db.cursor()
    cursor.execute(sql,('李四','10004'))
    db.commit()
except:
    db.rollback()
db.close()

刪除數(shù)據(jù)

根據(jù)條件刪除數(shù)據(jù),刪除id小于10004的數(shù)據(jù)

import pymysql

db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
try:
    sql = 'delete from students where id<%s'
    cursor = db.cursor()
    cursor.execute(sql,('10004'))
    db.commit()
except:
    db.rollback()
db.close()

實戰(zhàn)應(yīng)用

在實際應(yīng)用時,一般數(shù)據(jù)都是字典或者對象這種數(shù)據(jù),所以需要我們在拼接SQL語句的時候更加的靈活。

插入數(shù)據(jù),若數(shù)據(jù)存在更新數(shù)據(jù)

import pymysql

data = {
    'id':'10006',
    'name':'王五',
    'age':45
}
# 連接數(shù)據(jù)庫
db = pymysql.connect(user='root',password='123456',host='localhost',port=3306,db='spiders')
table = 'students' # 表名
keys = ','.join(data.keys()) # 拼接插入的字段
values = ','.join(['%s']*len(data)) # 添加占位符
# 使用with關(guān)鍵字,Python 解釋器會自動釋放資源。 它還提供錯誤處理
with db:
    cursor = db.cursor()
    sql = 'insert into {}({}) values({}) on duplicate key update'.format(table, keys, values)
    update = ','.join([" {key}=%s".format(key=key) for key in data])
    sql += update
    try:
        cursor.execute(sql, tuple(data.values()) * 2)
        db.commit()
    except:
        db.rollback()


可以發(fā)現(xiàn)在sql語句中有 on duplicate key update:當(dāng)主鍵存在的時候更新數(shù)據(jù)。
我們可以根據(jù)cursor.execute()的返回值來判斷數(shù)據(jù)是插入操作還是更新操作

  • 0 主鍵存在,且數(shù)據(jù)一樣沒有更新
  • 1 主鍵不存在,插入數(shù)據(jù)
  • 2 主鍵存在,更新操作

總結(jié)

通過pymysql我們實現(xiàn)了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,以及對數(shù)據(jù)的增刪改查,這種基本的操作,通過這些我們也能夠發(fā)現(xiàn)pymysql的主要作用就是連接數(shù)據(jù)庫將指令傳遞給mysql,具體的功能實現(xiàn)還是需要我們自己編寫sql語句,因此在使用pymysql的前提是能夠熟練編寫sql語句。
關(guān)于pymysql的一些技巧以及優(yōu)化后面會有新的文章來講解
pymysql操作數(shù)據(jù)庫,python,數(shù)據(jù)庫,mysql,sql文章來源地址http://www.zghlxwxcb.cn/news/detail-779194.html

到了這里,關(guān)于Python數(shù)據(jù)庫操作 ---- pymysql教學(xué)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python——數(shù)據(jù)庫操作

    Python——數(shù)據(jù)庫操作

    目錄 (1)安裝Flask-SQLAlchemy (2)使用Flask-SQLAlchemy操作數(shù)據(jù)庫 (3)連接數(shù)據(jù)庫 ??創(chuàng)建數(shù)據(jù)表 ?增加數(shù)據(jù) ?查詢數(shù)據(jù) ??更新數(shù)據(jù) ?刪除數(shù)據(jù) Flask-SQLAlchemy是Flask中用于操作關(guān)系型數(shù)據(jù)庫的擴(kuò)展包 ,該擴(kuò)展包內(nèi)部集成了SQLAlchemy,并簡化了在Flask程序中使用SQLAlchemy操作數(shù)據(jù)

    2024年02月04日
    瀏覽(27)
  • python操作數(shù)據(jù)庫

    首先安裝數(shù)據(jù)插件 數(shù)據(jù)庫的插入

    2024年02月13日
    瀏覽(26)
  • Python --數(shù)據(jù)庫操作

    目錄 1, mysql 1-1, mysql驅(qū)動 1-2, 連接mysql 1-3, 執(zhí)行sql語句 1-4, 數(shù)據(jù)表操作 1-4-1, 創(chuàng)建數(shù)據(jù)表 1-4-2, 查詢數(shù)據(jù)表 1-4-3, 修改數(shù)據(jù)表 1-4-4, 刪除數(shù)據(jù)表 1-5, 修改數(shù)據(jù)表內(nèi)容 1-5-1, 插入數(shù)據(jù) 1-5-2, 查詢數(shù)據(jù) 1-5-3, 獲取結(jié)果集 1-5-4, 更新數(shù)據(jù) 1-5-5, 刪除數(shù)據(jù) 1-6, 斷開mys

    2024年02月11日
    瀏覽(18)
  • 【SQL server】數(shù)據(jù)庫入門基本操作教學(xué)

    【SQL server】數(shù)據(jù)庫入門基本操作教學(xué)

    個人主頁:【??個人主頁】 系列專欄:【??初識JAVA】 數(shù)據(jù)庫是計算機(jī)系統(tǒng)中用于存儲和管理數(shù)據(jù)的一種軟件系統(tǒng)。它通常由一個或多個數(shù)據(jù)集合、管理系統(tǒng)和應(yīng)用程序組成,被廣泛應(yīng)用于企業(yè)、政府和個人等各種領(lǐng)域。目前常用的數(shù)據(jù)庫系統(tǒng)包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型

    2024年02月07日
    瀏覽(27)
  • 【100天精通python】Day30:使用python操作數(shù)據(jù)庫_數(shù)據(jù)庫基礎(chǔ)入門

    【100天精通python】Day30:使用python操作數(shù)據(jù)庫_數(shù)據(jù)庫基礎(chǔ)入門

    ?專欄導(dǎo)讀? 專欄訂閱地址: https://blog.csdn.net/qq_35831906/category_12375510.html 1.1 什么是數(shù)據(jù)庫? ????????數(shù)據(jù)庫是一個結(jié)構(gòu)化存儲和組織數(shù)據(jù)的集合,它可以被有效地訪問、管理和更新。數(shù)據(jù)庫的目的是為了提供一種可靠的方式來存儲和管理大量的數(shù)據(jù),以便用戶和應(yīng)用程序

    2024年02月13日
    瀏覽(35)
  • Python之?dāng)?shù)據(jù)庫操作(連接數(shù)據(jù)庫,增刪改查操作,易錯點理解)

    Python之?dāng)?shù)據(jù)庫操作(連接數(shù)據(jù)庫,增刪改查操作,易錯點理解)

    文章目錄 前言 一、Python之?dāng)?shù)據(jù)庫操作 二、 pymysql 安裝 三、pymysql 包引入 ?連接數(shù)據(jù)庫 創(chuàng)建游標(biāo) 執(zhí)行sql數(shù)據(jù) - 增刪改查 要獲取查詢結(jié)果數(shù)據(jù) 關(guān)閉游標(biāo),關(guān)閉數(shù)據(jù)庫連接 總結(jié) 記錄:Python操作數(shù)據(jù)庫的步驟,不容易理解的地方。 學(xué)習(xí)地址: python與各大數(shù)據(jù)庫的連接: http:/

    2023年04月16日
    瀏覽(57)
  • Python——操作MySQL數(shù)據(jù)庫

    Python——操作MySQL數(shù)據(jù)庫

    ??學(xué)習(xí)永無止境,記得每天學(xué)習(xí)新的知識?。?在很多業(yè)務(wù)場景中,我們或多或少都要對數(shù)據(jù)庫上的數(shù)據(jù)進(jìn)行的一系列操作, 包括讀取數(shù)據(jù)、寫數(shù)據(jù)、更新或修改數(shù)據(jù)、刪除數(shù)據(jù) 等。這些操作可以通過編寫SQL語句來實現(xiàn),也可以通過使用數(shù)據(jù)庫管理系統(tǒng)提供的API接口來實現(xiàn)。

    2024年02月09日
    瀏覽(46)
  • python與數(shù)據(jù)庫連接操作

    python與數(shù)據(jù)庫連接操作

    下載命令: pip install PyMySQL 一般我們會使用鏡像下載,這樣會比較快,比如清華鏡像: pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple 連接數(shù)據(jù)庫之前,我們需要知道自己需要連接數(shù)據(jù)庫的用戶名,密碼,數(shù)據(jù)庫名等信息 步驟: 連接connect() 創(chuàng)建cursor()對象 使用excute()執(zhí)行S

    2024年02月08日
    瀏覽(27)
  • Python 操作 MySQL 數(shù)據(jù)庫

    Python 標(biāo)準(zhǔn)數(shù)據(jù)庫接口為 Python DB-API,Python DB-API為開發(fā)人員提供了數(shù)據(jù)庫應(yīng)用編程接口。 Python 數(shù)據(jù)庫接口支持非常多的數(shù)據(jù)庫,你可以選擇適合你項目的數(shù)據(jù)庫: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以訪問Python數(shù)據(jù)庫接口及API查看詳細(xì)的支

    2024年02月14日
    瀏覽(19)
  • Python操作PostgreSQL數(shù)據(jù)庫

    Python操作PostgreSQL數(shù)據(jù)庫

    個人簡介 :一個從會計轉(zhuǎn)行數(shù)據(jù)分析師的三旬老漢 擅長領(lǐng)域 :數(shù)據(jù)分析、數(shù)據(jù)倉庫、大數(shù)據(jù) 博客內(nèi)容 :平時會將自己工作中遇到的問題進(jìn)行歸納總結(jié),分享給各位小伙伴,意在幫助大家 少加班 、 不掉發(fā) ,讓我們相互學(xué)習(xí),一起進(jìn)步。 本文分享使用Python操作PostgreSQL數(shù)據(jù)

    2024年02月15日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包