python鏈結資料庫的方式有幾種,但是原理都是一樣的,總共可以分為兩個步驟,第一步是與資料庫建立鏈結,第二步執行sql查詢語句。
兩種方法,第乙個是pymysql.connect
1、連線資料庫
import pymysql #先安裝好pymysql包
db = pymysql.connect(host='localhost',user='root',password='mysql',port=3306) #通過pymysql的connect()方法宣告乙個連線物件db。傳入host(ip)、使用者名稱、密碼、執行埠
cursor = db.cursor() #獲得mysql的操作游標,利用游標來執行sql語句
cursor.execute('select version()')
data = cursor.fetchone() #返回單個元祖
print('database version:',data) #列印資料庫版本
cursor.execute('create database spiders default character set utf8') #建立資料庫spiders
db.close()
輸出如下:
2、建立表
db = pymysql.connect(host='localhost',user='root',password='mysql',port=3306,db='spiders') #連線時需要指定引數db
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()
3、插入資料
id = '20120001'
user = 'bob'
age = 20
db = pymysql.connect(host='localhost',user='root',password='mysql',port=3306,db='spiders')
cursor = db.cursor()
sql = 'insert into students(id,name,age) values(%s,%s,%s)'
try: #異常處理
cursor.execute(sql,(id,user,age))
db.commit()
except:
db.rollback()
db.close()
如果需要突然增加字段,不大改動的話,傳入乙個動態變化的字典:
data = #根據插入的字段,動態修改
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
db = pymysql.connect(host='localhost',user='root',password='mysql',port=3306,db='spiders')
cursor = db.cursor()
sql = 'insert into () values ()'.format(table=table, keys=keys, values=values)
try:
if cursor.execute(sql, tuple(data.values())):
print('successful')
db.commit()
except:
print('failed')
db.rollback()
db.close()
4、更新資料
sql = 'update students set age = %s where name = %s'
try:
cursor.execute(sql, (25, 'bob'))
db.commit()
except:
db.rollback()
db.close()
5、刪除資料
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()
6、查詢資料
sql = 'select * from students where age >= 20'
try:
cursor.execute(sql)
print('count:', cursor.rowcount) #查詢結果的條數
one = cursor.fetchone()
print('one:', one)
results = cursor.fetchall() #返回元祖
print('results:', results)
print('results type:', type(results))
for row in results:
print(row)
except:
print('error')
# 將元組轉化為dataframe
df2 = pd.dataframe(data = list(results) ,columns = ['xx', 'xx'] )
df2
可以用while迴圈加fetchone()方法獲取所有資料(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')
第二種方法是create_engine,在pandas框架下使用create_engine 加read_sql()方法,讀取資料庫檔案,**簡潔,易懂,返回的是資料框
from sqlarchemy import create_engine #先安裝好sqlarchemy包
#create_engine("mysql+pymysql://:@/[?]")
# mysql:資料庫型別
# pymysql:驅動器型別
# username:使用者名稱
# password:密碼
# dbname:資料庫名
# options:資料庫編碼格式如:charset=utf8
# 連線sample
eng = create_engine("mysql+pymysql:")
讀取資料檔案
import pandas as pd
from sqlalchemy import create_engine
eng = create_engine("mysql+pymysql://zhangjian:zhangjian*[email protected]:3306/demo?charset=gbk")
data = pd.read_sql(sql = 'select * from orderitem limit 10',con=eng,index_col='sdate')
data
# 返回資料框結構,可以方便瀏覽資料
#pd.read_sql(
#sql, #完整的sql語句。也可以使用表名稱,讀取表中的全部資料,如data = pd.read_sql(sql = "category",con=eng)
#con, #sqlalchemy連線引擎名稱
#index_col = none, #將被用作索引的名稱
#columns = none #當sql引數使用的是表名稱是,指定需要讀入的列,使用list提供
#)
python連線MySQL資料庫
模組功能 connect 方法 connect 方法用於連線 資料庫,返回乙個資料庫連線物件。如果要連線乙個位於host.remote.com伺服器上名為fourm的mysql資料庫,連線串可以這樣寫 db mysqldb.connect host remote.com user user pass...
python連線mysql資料庫
看自己的機器有沒有python root localhost zn python v 會進入python pythontest。py檔案內容 usr bin python imoprt mysql module import mysqldb connect to the database db my...
python連線mysql資料庫
1 python3.5 連線mysql資料庫需要安裝pymysql外掛程式 參考教程 import pymysql conn pymysql.connect host localhost port 3306,user root passwd rusky db mysql charset utf8 c...