1、python使用mysql的流程:
2、.啟動mysql伺服器:以管理員身份啟動「cmd」,輸入命令:』net start mysql『
python中使用mysql匯入方法:import mysqldb
3、.建立connection
connection:建立了python客戶端與資料庫之間的網路通路。他的引數如下
引數名型別
說明host
string
mysql的伺服器位址
port
intmysql的埠號
user
string
使用者名稱passwd
string
密碼db
string
使用的資料庫
charset
string
連線字符集
connection支援的方法:
方法名說明
cursor()
建立並且返回游標
commit()
提交當前事物
rollback()
回滾當前事物r()
close()
關閉connection
4、.獲取cursor.
cursor:游標物件,用於執行查詢和獲取結果,它支援的方法如下:
方法名說明
execute()
用於執行乙個資料庫的查詢命令
fetchone()
獲取結果集中的下一行
fetchmany(size)
獲取結果集中的下(size)行
fetchall()
獲取結果集中剩下的所有行
rowcount
最近一次execute返回資料/影響的行數
close()
關閉游標
例項:
#連線和建立spider資料庫
import pymysql
db = pymysql.connect(host='localhost',user='root', password='123456', port=3306)
cursor = db.cursor()
cursor.execute('select version()')
data = cursor.fetchone()
print('database version:', data)
cursor.execute("create database spiders default character set utf8")
db.close()
#建立表
import pymysql
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='
spiders')
cursor = db.cursor()
sql = 'create
table
ifnot
exists students (id varchar(255) not
null, name varchar(255
) not
null, age int
notnull, primary
key (id))'
cursor.execute(sql)
db.close()
#插入資料
data = t
able = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'insert into () values ()'.format(table=table, keys=keys, v
alues=values)
try:
if cursor.execute(sql, tuple(data.values())):
print('successful')
db.commit()
except:
print('failed')
db.rollback()
db.close()
詳解:首先我們需要構造插入的字段,id、name 和 age,在這裡只需要將data的鍵名拿過來,然後用逗號分隔即可。所以 『, 『.join(data.keys()) 的結果就是 id, name, age,然後我們需要構造多個 %s 當作佔位符,有幾個字段構造幾個,比如在這裡有兩個字段,就需要構造 %s, %s, %s,所以在這裡首先定義了長度為 1 的陣列 [『%s』] ,然後用乘法將其擴充為 [『%s』, 『%s』, 『%s』],再呼叫 join() 方法,最終變成 %s, %s, %s。所以我們再利用字串的 format() 方法將表名,欄位名,佔位符構造出來
#資料更新
sql = 'update students set age = %s where name = %s'
try:
cursor.execute(sql, (25, 'bob'))
db.commit()
except:
db.rollback()
db.close()
#出現重複時執行更新操作
data = t
able = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'insert into () values () on duplicate key update'.format(t
able=table, keys=keys, values=values)
update = ','.join([" = %s".format(key=key) for key in data])
sql += update
try:
if cursor.execute(sql, tuple(data.values())*2):
print('successful')
db.commit()
except:
print('failed')
db.rollback()
db.close()
#刪除資料
table = 'students'
condition = 'age > 20'
sql = 'delete from where '.format(table=table,condition=condition)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
#資料查詢
'''它的內部實現是有乙個偏移指標來指向查詢結果的,最開始偏移指標指向第一
條資料,取一次之後,指標偏移到下一條資料,這樣再取的話就會取到下一條資料了。所以
我們最初呼叫了一次 fetchone() 方法,這樣結果的偏移指標就指向了下一條資料,fetchall()
方法返回的是偏移指標指向的資料一直到結束的所有資料,所以 fetchall() 方法獲取的結果就
只剩 3 個了,所以在這裡要理解偏移指標的概念。
所以我們還可以用 while 迴圈加 fetchone() 的方法來獲取所有資料,而不是用 fetchall() 全部
一起獲取出來,fetchall() 會將結果以元組形式全部返回,如果資料量很大,那麼占用的開銷
'''sql = 'select * from students where age >= 20'
try:
cursor.execute(sql)
print('count:', cursor.rowcount)
row = cursor.fetchone()
while row:
print('row:', row)
row = cursor.fetchone()
except:
print('error')
python mysql 游標使用
callproc sql,procname,args stored results 執行儲存過程,接收引數為儲存過程名和引數列表,返回值為受影響的行數。呼叫 callproc 後,產生的結果集合可以用stored results函式獲取。execute sql,param,args 執行單條sql語...
Python MySQL(索引的使用補充)
索引 作用 索引普通索引 加速查詢 主鍵索引 加速查詢 不能為空 不能重複 唯一索引 加速查詢 不能重複 聯合索引 聯合唯一索引 聯合主鍵索引 多列聯合起來作為主鍵索引 聯合唯一索引 多列聯合起來作為唯一索引 聯合普通索引 加速查詢 索引就像乙個目錄一樣,如果沒有目錄就要從頭到尾看一遍 無索引 從前...
Response AddHeader使用例項收集
response.addheader refresh 60 url newpath newpage.asp 這等同於客戶機端元素 頁面轉向 response.status 302 object moved response.addheader location newpath newpage.asp...