前幾天資料庫課程的乙個小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(
)
更新updatedef
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(
)
查詢selectdef
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幫...