Python連線Mysql資料庫操作方法

2021-08-27 08:59:22 字數 4523 閱讀 5606

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...