實際開發中,我們會經常用到資料庫。
python裡對資料庫的操作api都很統一。
python內建了sqlite3。
#coding:utf-8
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
# sqlite建立表時,若id為integer型別且為主鍵,可以自動遞增,在插入資料時id填null即可
# cursor.execute('create table user(id integer primary key, name varchar(25))') #執行一次
# 插入一條資料
cursor.execute('insert into user(id,name)values(null,"yjc")')
# 返回影響的行數
print(cursor.rowcount)
#提交事務,否則上述sql不會提交執行
conn.commit()
# 執行查詢
cursor.execute('select * from user')
# 獲取查詢結果
print(cursor.fetchall())
# 關閉游標和連線
cursor.close()
conn.close()
輸出:
1
[(1, 'yjc'), (2, 'yjc')]
我們發現python裡封裝的資料庫操作很簡單:
1、獲取連線conn
;
2、獲取游標cursor
;
3、使用cursor.execute()
執行sql語句;
4、使用cursor.rowcount
返回執行insert,update,delete語句受影響的行數;
5、使用cursor.fetchall()
獲取查詢的結果集。結果集是乙個list,每個元素都是乙個tuple,對應一行記錄;
6、關閉游標和連線。
如果sql語句帶有引數,那麼需要把引數按照位置傳遞給cursor.execute()
方法,有幾個?
佔位符就必須對應幾個引數,示例:
cursor.execute('select * from user where name=? ', ['abc'])
為了能在出錯的情況下也關閉掉connection
物件和cursor
物件,建議實際專案裡使用try:...except:...finally:...
結構。
mysql是最流行的關聯式資料庫。
sqlite的特點是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而mysql是為伺服器端設計的資料庫,能承受高併發訪問,同時占用的記憶體也遠遠大於sqlite。
使用需要先安裝mysql:
windows版本安裝時注意選擇utf-8
編碼,以便正確地處理中文。
mysql的配置檔案是my.ini
,linux一般位於/etc/my.cnf
。配置裡需要設定編碼為utf-8。配置示例:
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = innodb
character-set-server = utf8
collation-server = utf8_general_ci
python並未內建mysql的驅動。需要先安裝:
$ pip3 install mysql-connector
collecting mysql-connector
downloading mysql-connector-2.1.4.zip (355kb)
100% |████████████████████████████████| 358kb 355kb/s
building wheels for collected packages: mysql-connector
running setup.py bdist_wheel for mysql-connector ... done
successfully built mysql-connector
installing collected packages: mysql-connector
successfully installed mysql-connector-2.1.4
python使用mysql示例:
# coding: utf-8
import mysql.connector
conn = mysql.connector.connect(user='root', password='123456', database='test')
cursor = conn.cursor()
cursor.execute("insert into user(id,name,age)values(null,'python', 20)")
print(cursor.rowcount)
conn.commit()
cursor.execute("select * from user order by id desc limit 3")
print(cursor.fetchall())
cursor.close()
conn.close
輸出:
1
[(25, 'python', 1, 20, 1), (24, 'python', 1, 20, 1), (23, 't2', 2, 23, 1)]
如果sql語句帶有引數,那麼需要把引數按照位置傳遞給cursor.execute()
方法,mysql的佔位符是%s
,示例:
cursor.execute('select * from user where name=%s and age=%s', ['python', 20])
由於python的db-api定義都是通用的,所以,操作mysql的資料庫**和sqlite類似。 Python訪問資料庫 學習筆記
1 使用sqlite python內建 演示 列印出成績在60 100之間的使用者名稱 import os,sqlite3 db file db school.db if os.path.isfile db file os.remove db file 初始資料 conn sqlite3.conne...
python 訪問資料庫
commit 提交 rollback 回滾 cursor用來執行命令的方法 callproc self,procname,args 用來執行儲存過程,接收的引數為儲存過程名和引數列表,返回值為受影響的行數 execute self,query,args 執行單條sql語句,接收的引數為sql語句本身...
Python學習筆記 ADO訪問資料庫
因為工作中用到ado訪問工業資料庫,在這做乙個記錄。ado activex data objects,activex資料物件 是microsoft提出的應用程式介面 api 用以實現訪問關係或非關聯式資料庫中的資料。ado的五個基本物件型別 connection object連線物件 連線物件經常用...