Python運算元據庫

2021-09-19 17:31:57 字數 4310 閱讀 2419

前幾天資料庫課程的乙個小project,需要接入mysql資料庫,匯入資料,寫了個指令碼,做簡單的crud操作,用python實現,簡單地記錄一下,原文見python運算元據庫。

依賴可以用mysql-python來連mysql,安裝很簡單,pip install mysql-python,然後在指令碼裡引入import mysqldb即可。有不止乙個庫實現類似的功能,api大同小異。

連線首先要做的是鏈結資料庫,當然要確保你mysql server是安裝執行的,用homebrew安裝的話brew install mysql

鏈結資料庫之後,會返回乙個cursor,主要通過這個cursor執行sql語句,運算元據庫。比如有乙個資料庫叫musicdb,鏈結的函式如下。

import mysqldb

defconnect_db()

:"""connect database and return db and cursor"""

db = mysqldb.connect(host=

"localhost"

,user=

'root'

, passwd=

'passwd'',db=

"musicdb"

) cursor = db.cursor(

)return db, cursor

當然如果想確認下有沒有鏈結成功的話,可以用如下**。

db, cursor = connect_db(

)cursor.execute(

"select version()"

)data = cursor.fetchone(

)print

"database version : %s "

% data

db.close(

)

執行指令碼,如果看到類似這樣的輸出database version : 5.0.45,表明就ok了。

檢查表的存在

有時候可能需要不知一次修改資料庫的表,不想直接在terminal裡寫sql,想直接修改指令碼,重新跑一下,直接刪除表,需要看下表是否存在。mysql裡有個表information_schema.tables包含資料庫表的資訊。

def

table_exists

(table_name)

:"""check table existence base on table name"""

db, cursor = connect_db(

) cursor.execute("select * from information_schema.tables \

where table_name =

'%s'" % table_name)

nrows =

int(cursor.rowcount)

; db.close(

)return

false

if nrows ==

0else

true

建立表
def

create_table_artist()

:# connect database

db, cursor = connect_db(

) sql =

"""create table artist(

name char(50) not null,

url char(80),

playcount int)"""

ifnot table_exists(

'artist'):

cursor.execute(sql)

# remember to disconnect from server

db.close(

)

刪除表

當然了,刪除表不是乙個常見的操作,不過偶然可能用到。

def

drop_table

(table_name)

: db, cursor = connect_db(

)if table_exists(table_name)

: sql =

"""drop table %s"""

% table_name

cursor.execute(sql)

db.close(

)

插入insert

我們從外部讀入資料之後,可以把這些資料插入到資料庫中,具體的toy資料開心用啥就用啥嘍。插入資料的時候,如果資料不符合建立表時候的定義,就會丟擲錯誤,我們需要簡單地處理下。如果try成功了,那就db.commit()將改變寫入到資料庫,如果try失敗,那就db.rollback()回來。記得要**db.commit()**哦,要不然那個表總是一行資料都沒有。

def

insert_into_artist()

: artists = load_json(

'artists.json'

)

db, cursor = connect_db(

) sql =

"""insert into artist(name, url, playcount)

values ('%s', '%s', '%d')"""

for a in artists:

try:

# remember to convert playcount to integer

tp =

(a['name'

], a[

'url'],

int(a[

'playcount'])

) cursor.execute(sql % tp)

db.commit(

)except

: db.rollback(

) db.close(

)

刪除delete

刪除操作也很類似,定義sql語句,execute即可,如果失敗就rollback回來。如果表裡乙個欄位是其他表的foreign key的話,直接刪除這條記錄就會丟擲錯誤,所以需要考慮下這種異常情況。

def

delete_artist

(artist)

: db, cursor = connect_db(

) sql =

"delete from artist where name='%s'"

% artist

try: cursor.execute(sql)

db.commit(

)except

: db.rollback(

) db.close(

)

更新update
def

update_artist

(artist)

: db, cursor = connect_db(

) sql =

"update artist set playcount = playcount + 1 where name='%s'"

% artist

try: cursor.execute(sql)

db.commit(

)except

: db.rollback(

) db.close(

)

查詢select
def

top_artists()

: db, cursor = connect_db(

) sql =

"select * from artist where playcount > '%d' "

%100000

try:

cursor.execute(sql)

return cursor.fetchall(

) execept:

print

("error in fetching data"

) db.close(

)results = top_artists(

)for row in results:

name = row[0]

print

(name)

python運算元據庫

資料庫的操作在現在的python裡面已經變得十分的好用,有了一套api標準.下面的就是講講如何的去使用這套框架定義.此框架包含以下部分 connect parameters.其中的引數格式如下 dsn 資料來源名稱 user 使用者名稱 可選 password 密碼 可選 host 主機名 可選 d...

python 運算元據庫

目的 通過excel定義檢查指標項,然後通過python讀取指標,通過oracle sqlplus工具去執行獲取具體巡檢結果。unicode utf 8 coding utf 8 import os import sys import xlrd import paramiko reload sys ...

python運算元據庫

python運算元據庫都是通過資料庫驅動取操作的。現在主要有兩張,一種是通過pymysql,還有一種是通過sqlalchemy。在這裡可能還會有人說還有mysqldb模組也可以操作。確實是的,但是mysqldb對python3已經不支援了,所以這裡我就不討論了。第一種pymysql pymysql幫...