【Python】-SQLite-數據庫操作集合

python對SQLite的中高級操作,滿足基本的日常訴求。3.1--3.5章節分別是多個例子,可以逐個放開進行試驗

覺得不錯,順便點個贊吧!

'''
1、調用connect()方法打開數據庫連接,該方法返回數據庫連接對象
2、通過數據庫連接對象打開遊標
3、使用遊標執行SQL語句(包含DDL、DML、select查詢語句等)
4、關閉遊標
5、關閉數據庫連接
6、本例子練習了a、數據庫連接、b、執行語句、d、執行多條插入、d、執行多次獲取、e、sqlite自定義函數 f、自定義聚集函數
***************
1、python如果只帶一個元素的元組,元素後面要加一個","  逗號。 
2、DML語句(Data Manipulation Language):用於增刪改表中數據,DML是伴隨TCL事務控制的。
3、DDL語句(Data Definition Language):數據定義語言,用來維護數據庫對象 
4、rowcount屬性在update語句後面纔會返回行數,默認是-1
'''
import sqlite3

#1、打開或創建數據庫
conn = sqlite3.connect('first.db')
#2、獲取遊標
c = conn.cursor()
#3、執行語句
#***3.1、3.2、3.3多個章節的語句可以逐次打開執行***#
#3.1數據庫DDL語句,創建user_tb、order_tb兩個表
create_user_tb_SQL = '''create table user_tb(_id integer primary key autoincrement,
name text,
pass text,
gender text)'''
create_order_tb_SQL = '''create table order_tb(_id integer primary key autoincrement,
item_name text,
item_price real,
item_number real,
user_id integer,
foreign key(user_id) references user_tb(_id))'''
#c.execute(create_user_tb_SQL)
#c.execute(create_order_tb_SQL)

#3.2執行插入語句
#c.execute('insert into user_tb (name,pass,gender) values ("孫悟空","123456","male")')
#c.execute('insert into order_tb (item_name,item_price,item_number,user_id) values ("鼠標",34.2,3,1)')
#conn.commit()

#3.3執行多行插入
#insertManyList = (("sun","123456","male"),("bai","123456","female"),("zhu","123456","male"))
#c.executemany('insert into user_tb (name,pass,gender) values (?,?,?)',insertManyList)#此處用了佔位符"?"
#conn.commit()

#3.4執行獲取數據並逐行呈現
'''c.execute('select * from user_tb where _id > 1')
#print('查詢返回的記錄數:',c.rowcount)
#通過遊標的descritpion屬性獲取列信息
for col in (c.description):
    print(col[0],end = '\t')
print('\n','*'*30)
while True:
    row = c.fetchone()
    if not row:
        break
    print(row)
    print(row[1]+'---->'+row[2])'''

#3.5執行創建自定義函數
'''#使用自定義函數。場景:可以用於密碼加密
def reverse_ext(st):
    return '['+st[::-1]+']'#st[::-1]是對字符串進行取反;
#數據庫連接對象提供的create_function(name,num_params,func)方法
#a、name參數:指定註冊的自定義函數的名字
#b、num_params參數:自定義函數所需要的參數數量
#c、func參數:指定自定義函數對應的函數
conn.create_function('enc',1,reverse_ext)#注意:create_function第一個函數的別名需要用單引號,第三個參數的函數名不需要單引號
c.execute('insert into user_tb (name,pass,gender) values (?,enc(?),?)',('賈寶玉','123456','male'))
conn.commit()'''

#3.6執行創建聚集函數
#數據庫連接對象提供的create_aggregate(name,num_params,aggregate_class)
#a、name參數:指定註冊的自定義聚集函數的名字
#b、num_params參數:自定義聚集函數所需要的參數數量
#c、aggregate:指定聚集函數的實現類。該類必須實現step(self,params...)和finalize(self)
#   其中step函數對於查詢所返回的每條記錄各執行一次;
#   其中finalize只在最後執行一次,該方法的返回值作爲聚集函數的返回值
#class--定義聚集類
class MinLen:
    def __init__(self):
        self.min_len = None
    def step(self,value):
        if(self.min_len is None):
            self.min_len = value
            return
        if(self.min_len > value):
            self.min_len = value
    def finalize(self):
        return self.min_len
conn.create_aggregate('min_len',1,MinLen)
c.execute('select min_len(pass) from user_tb')
print(c.fetchone()[0])
conn.commit()
#4、關閉遊標
c.close()
#5、關閉連接
conn.close()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章