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

python處理SQLite數(shù)據(jù)庫(kù)的方法

 更新時(shí)間:2022年02月21日 11:48:30   作者:Crayon鑫  
這篇文章主要介紹了python處理SQLite數(shù)據(jù)庫(kù)的方法,python處理數(shù)據(jù)庫(kù)非常簡(jiǎn)單。而且不同類(lèi)型的數(shù)據(jù)庫(kù)處理邏輯方式大同小異。本文以sqlite數(shù)據(jù)庫(kù)為例,介紹一下python操作數(shù)據(jù)庫(kù)的方,需要的朋友可以參考下,希望能幫助到大家

前言:

數(shù)據(jù)庫(kù)非常重要,程序的數(shù)據(jù)增刪改查需要數(shù)據(jù)庫(kù)支持。python處理數(shù)據(jù)庫(kù)非常簡(jiǎn)單。而且不同類(lèi)型的數(shù)據(jù)庫(kù)處理邏輯方式大同小異。本文以sqlite數(shù)據(jù)庫(kù)為例,介紹一下python操作數(shù)據(jù)庫(kù)的方法。

python sqlite3 官方文檔

一、安裝

pip3 install pysqlite3

三、數(shù)據(jù)庫(kù)連接、關(guān)閉等

import sqlite3
# 連接數(shù)據(jù)庫(kù)(如果不存在則創(chuàng)建)
conn = sqlite3.connect('test.db')
print("Opened database successfully")
?
# 創(chuàng)建游標(biāo)
cursor = conn.cursor()

# 關(guān)閉游標(biāo)
cursor.close()
# 提交事物
conn.commit()
# 關(guān)閉連接
conn.close()

四、表操作

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

import sqlite3

conn = sqlite3.connect('test.db')
print ("數(shù)據(jù)庫(kù)打開(kāi)成功")
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
? ? ? ?(ID INT PRIMARY KEY ? ? NOT NULL,
? ? ? ?NAME ? ? ? ? ? TEXT ? ?NOT NULL,
? ? ? ?AGE ? ? ? ? ? ?INT ? ? NOT NULL,
? ? ? ?ADDRESS ? ? ? ?CHAR(50),
? ? ? ?SALARY ? ? ? ? REAL);''')
print ("數(shù)據(jù)表創(chuàng)建成功")
conn.commit()
conn.close()

2、顯示數(shù)據(jù)表數(shù)目

sql="select name from sqlite_master where type='table' order by name"
tables=cursor.execute(sql).fetchall()
print(len(tables))

3、刪除數(shù)據(jù)表

sql="DROP TABLE database_name.table_name"
cursor.execute(sql)

五、Cusor的一些方法

fetchone()

獲取查詢結(jié)果集的下一行

fetchmany(size=cursor.arraysize)

獲取查詢結(jié)果的下一組行,返回一個(gè)列表。

fetchall()

取查詢結(jié)果的所有(剩余)行,返回一個(gè)列表。請(qǐng)注意,游標(biāo)的 arraysize 屬性會(huì)影響此操作的性能。當(dāng)沒(méi)有行可用時(shí)返回一個(gè)空列表。

注:fetchall()用來(lái)統(tǒng)計(jì)表記錄時(shí),在開(kāi)頭用一次,再用則查詢?yōu)榭?/p>

.description顯示字段信息,返回列表。

六、SQL操作

1、查

...
# 創(chuàng)建游標(biāo)
cursor = conn.cursor()
?
# 查詢數(shù)據(jù)
sql = "select * from Student"
values = cursor.execute(sql)
for i in values:
? ? print(i)
?
# 查詢數(shù)據(jù) 2
sql = "select * from Student where id=?"
values = cursor.execute(sql, (1,))
for i in values:
? ? print('id:', i[0])
? ? print('name:', i[1])
? ? print('age:', i[2])
?
# 提交事物
conn.commit()
...

2、增

...
# 創(chuàng)建游標(biāo)
cursor = conn.cursor()
?
# 插入數(shù)據(jù)
sql = "INSERT INTO Student(Name, Age) VALUES(\'love\', 22)"
cursor.execute(sql)
?
# 插入數(shù)據(jù) 2
data = ('love2', 2221) # or ['love2', 2221]
sql = "INSERT INTO Student(Name, Age) VALUES(?, ?)"
cursor.execute(sql, data)
?
# 提交事物
conn.commit()
...

3、刪

sql語(yǔ)句換一下即可,看下一節(jié)的SQL語(yǔ)句。

4、改

sql語(yǔ)句換一下即可,看下一節(jié)的SQL語(yǔ)句。

七、SQL常用語(yǔ)句

# 增 ? 兩種方法
sql1="INSERT INTO table_name VALUES (value1,value2,value3,...);"
sql2='''INSERT INTO table_name?
?? ?(column1,column2,column3,...)?
?? ?VALUES (value1,value2,value3,...);'''
# 刪
sql="DELETE FROM table_name WHERE [condition];"
# 改
sql="UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];"
# 查
sql="SELECT * FROM table_name;"

# 重命名
sql="ALTER TABLE 老表名 RENAME TO 新表名;"
# 添加字段
sql="ALTER TABLE 表名 ADD COLUMN 新列 TEXT;"

# 查看所有字段名
sql="PRAGMA table_info([表名])"

八、row_factory 高級(jí)操作

這是對(duì)row_factory的官方解釋(官方解釋直接忽略就好,看我下面的解釋?zhuān)?/strong>A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.

基礎(chǔ)Cursor對(duì)象只能通過(guò)數(shù)字索引來(lái)獲取值,但是我想通過(guò)列名來(lái)獲取值是做不到的。雖然可以使用Cursor.description來(lái)獲取字段名稱,但是自己做映射寫(xiě)代碼很麻煩。
本著簡(jiǎn)約代碼(懶)的原則,python推出了Cursor.Row對(duì)象。其實(shí)就是列名和值做了個(gè)映射,可以通過(guò)字符索引來(lái)獲取值。很方便。
升級(jí)過(guò)程也簡(jiǎn)單,就加一句話:conn.row_factory = sqlite3.Row

看例子:

1、使用

import sqlite3?
conn=connectSqlite("myDB.db")
conn.row_factory = sqlite3.Row # 這句一定要加
cursor=conn.cursor()
rows=cursor.execute("SELECT * from myTable ")

row=rows.fetchone()
row.key() # 返回所有字段名,
print(row[0]) # 輸出第一個(gè)字段
print(row["field1"]) # 輸出字段名為field1的值

2、循環(huán)輸出所有值

# ...上接上面的第一塊內(nèi)容
s=0
for row in rows:# 迭代就不用fetchone()了
?? ?s+=1
?? ?print("打印第{}個(gè)數(shù)據(jù)".format(s))
?? ?for r in row:
?? ??? ?print(r)

九、實(shí)例

1、從sqlite數(shù)據(jù)庫(kù)中返回json格式數(shù)據(jù)

'''
description: 根據(jù)輸入條件,從sqlite數(shù)據(jù)庫(kù)中返回JSON數(shù)據(jù)?
param {*} db_name:str 數(shù)據(jù)庫(kù)名稱
param {*} fields:list 篩選的字段
param {*} table_name:str 要查詢的表名
param {*} condition:str 查詢的條件,注意條件的值是字符串的話需要轉(zhuǎn)義
return {*} json
author: https://blog.csdn.net/Crayonxin2000
'''
def returnJsonFromSqlite(db_name,fields,table_name,condition):
? ? data = {}
? ? rows = [] ?# 數(shù)據(jù)
? ? conn = connectSqlite(db_name)
? ? conn.row_factory = sqlite3.Row
? ? cursor = conn.cursor()
? ? fields_str = ",".join(fields) ?# 列表轉(zhuǎn)字段,fields為所有的字段
? ? if condition=="" or condition==None:
? ? ? ? sql="SELECT {} from {} ".format(fields_str,table_name)
? ? else:
? ? ? ? sql="SELECT {} from {} WHERE {}".format(fields_str,table_name,condition)
? ? print(sql)
? ? result=cursor.execute(sql)
? ? for item in result:
? ? ? ? row = []
? ? ? ? for field in fields:
? ? ? ? ? ? row.append(item[field])
? ? ? ? rows.append(row)
? ? data["header"] = fields
? ? data["rows"] = rows
? ? # 關(guān)閉數(shù)據(jù)庫(kù)
? ? cursor.close()
? ? conn.close()
? ? return jsonify(data)?

注:data是字典,我用flask的jsonify工具JSON化了,你可以使用其他工具。

到此這篇關(guān)于python處理SQLite數(shù)據(jù)庫(kù)的方法的文章就介紹到這了,更多相關(guān)python處理SQLite數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 跟老齊學(xué)Python之玩轉(zhuǎn)字符串(2)

    跟老齊學(xué)Python之玩轉(zhuǎn)字符串(2)

    上一篇文章章中已經(jīng)講到連接兩個(gè)字符串的一種方法,本文繼續(xù)講訴連接字符串的方法2,字符串復(fù)制,字符串長(zhǎng)度,字符大小寫(xiě)的轉(zhuǎn)換,希望對(duì)大家有所幫助。
    2014-09-09
  • 理解Django 中Call Stack機(jī)制的小Demo

    理解Django 中Call Stack機(jī)制的小Demo

    這篇文章主要介紹了理解Django 中Call Stack 機(jī)制的小Demo,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python?Enum枚舉類(lèi)的定義及使用場(chǎng)景最佳實(shí)踐

    Python?Enum枚舉類(lèi)的定義及使用場(chǎng)景最佳實(shí)踐

    枚舉(Enum)是一種有助于提高代碼可讀性和可維護(hù)性的數(shù)據(jù)類(lèi)型,允許我們?yōu)橐唤M相關(guān)的常量賦予有意義的名字,在Python中,枚舉類(lèi)(Enum)提供了一種簡(jiǎn)潔而強(qiáng)大的方式來(lái)定義和使用枚舉
    2023-11-11
  • python計(jì)算一個(gè)序列的平均值的方法

    python計(jì)算一個(gè)序列的平均值的方法

    這篇文章主要介紹了python計(jì)算一個(gè)序列的平均值的方法,涉及Python遞歸遍歷與數(shù)學(xué)計(jì)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python設(shè)置Word全局樣式和文本樣式的示例代碼

    Python設(shè)置Word全局樣式和文本樣式的示例代碼

    這篇文章主要介紹了如何利用Python對(duì)Word內(nèi)容進(jìn)行各種樣式的設(shè)置,讓其能夠看起來(lái)更加的美觀。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • Python3之不使用第三方變量,實(shí)現(xiàn)交換兩個(gè)變量的值

    Python3之不使用第三方變量,實(shí)現(xiàn)交換兩個(gè)變量的值

    今天小編就為大家分享一篇Python3之不使用第三方變量,實(shí)現(xiàn)交換兩個(gè)變量的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python基礎(chǔ)必備之語(yǔ)法結(jié)構(gòu)詳解

    Python基礎(chǔ)必備之語(yǔ)法結(jié)構(gòu)詳解

    Python語(yǔ)法定義了用于在 Python 編程中創(chuàng)建句子的所有規(guī)則集。如果想更深入地研究 Python 詞法結(jié)構(gòu),需要了解構(gòu)成語(yǔ)句的句法元素,即構(gòu)成 Python 程序的基本單元,涵蓋控制結(jié)構(gòu),在不同代碼組之間引導(dǎo)程序流的構(gòu)造,快跟隨小編一起學(xué)習(xí)一下吧
    2022-04-04
  • Python 中的單分派泛函數(shù)你真的了解嗎

    Python 中的單分派泛函數(shù)你真的了解嗎

    singledispatch是標(biāo)準(zhǔn)庫(kù)functools模塊的函數(shù) 可以把整體方案拆成多個(gè)模塊,甚至可以為你無(wú)法修改的類(lèi)提供專(zhuān)門(mén)的函數(shù),使用@singledispatch裝飾的函數(shù)會(huì)變成泛函數(shù),本文帶領(lǐng)大家再次學(xué)習(xí)Python 中的單分派泛函數(shù),一起學(xué)習(xí)下吧
    2021-06-06
  • 帶你了解python裝飾器

    帶你了解python裝飾器

    Python中的裝飾器是你進(jìn)入Python大門(mén)的一道坎,不管你跨不跨過(guò)去它都在那里。Python中的裝飾器的概念經(jīng)常會(huì)讓人搞得一頭霧水,所以今天就好好來(lái)分析一下python中的裝飾器
    2017-06-06
  • Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹

    Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹

    這篇文章主要介紹了Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹,本文分別給出多個(gè)代碼實(shí)例來(lái)講解多種多樣的函數(shù)參數(shù),需要的朋友可以參考下
    2015-06-06

最新評(píng)論