Python檢查MySQL數(shù)據(jù)庫表存在并存儲/刪除庫表

需要實現(xiàn)的功能

  • 新建數(shù)據(jù)庫之前瑟曲,檢查是否已存在
  • 新建數(shù)據(jù)表之前舒岸,檢查是否已存在
  • 測試用的數(shù)據(jù)庫及數(shù)據(jù)表块饺,在測試完后刪除

以下為具體實現(xiàn)

判斷數(shù)據(jù)庫存在并創(chuàng)建

使用SqlAlchemy連接MySQL數(shù)據(jù)庫的步驟:
1谨究、創(chuàng)建連接用的url
2莹汤、判斷該url是否為一個已存在的數(shù)據(jù)庫拴袭。若不存在读第,則應(yīng)首先創(chuàng)建該數(shù)據(jù)庫。
3拥刻、新建連接engine
4怜瞒、連接數(shù)據(jù)庫

創(chuàng)建連接用的 url

db_url = ‘mysql+pymysql://username:password@localhost:port/db_name

檢查數(shù)據(jù)庫是否存在

需要從`sqlalchemy_utils`庫中導(dǎo)入`database_exists`和`create_database`
from sqlalchemy_utils import database_exists, create_database`
# 檢查數(shù)據(jù)庫是否存在,并創(chuàng)建
if not database_exists(db_url):
  create_database(db_url, encoding='utf8')

# 新建連接engine
engine = create_engine(db_url)

# 連接數(shù)據(jù)庫
conn = engine.connect()

判斷數(shù)據(jù)表存在并創(chuàng)建

通過engine的table_names()方法返回當(dāng)前數(shù)據(jù)庫里所有表名稱般哼,從而判斷某個數(shù)據(jù)表table_name是否存在
由于是通過pandas來存儲和讀取數(shù)據(jù)表吴汪,因此即便表不存在,可以直接用pandas.to_sql保存蒸眠,不必提前創(chuàng)建表結(jié)構(gòu)漾橙,省去了寫sql語句的麻煩。

if table_name not in engine.table_names():
  df.to_sql(table_name, con=conn, index=False) # 如果表不存在楞卡,則直接保存

若表存在霜运,則最好先檢查待存DataFrame的列標(biāo)簽是否與當(dāng)前表的表頭一致。此處需要用到sqlalchemy.inspect蒋腮,具體為:

from sqlalchemy import inspect

inspector = inspect(engine)
# 返回某個數(shù)據(jù)表里的列名
columns_dict_list = inspector(table_name) # 返回的是一個字典的列表淘捡,列表中每個元素的’name’鍵對應(yīng)該數(shù)據(jù)表的一個列名
columns = [item[‘name’] for item in columns_dict_list]

比較兩組數(shù)據(jù)表的列名,無誤后即可繼續(xù)使用pandas.to_sql向已有的數(shù)據(jù)表添加數(shù)據(jù)池摧,其中參數(shù)if_exists的值為append

if df_columns == columns: # df_columns是待存儲DataFrame的列名列表
  df.to_sql(table_name, con=conn, if_exists=‘a(chǎn)ppend’) 

刪除測試時添加的數(shù)據(jù)庫表

筆者目前沒有在sqlalchemy中找到刪除數(shù)據(jù)庫表的方法案淋,所以只能使用sqlalchemy_utils庫的drop_database來刪除數(shù)據(jù)庫,使用pymysql庫及sql語句來刪除數(shù)據(jù)表险绘。

刪除數(shù)據(jù)表

import pymysql
# 使用pymysql建立與數(shù)據(jù)庫的連接:
pymysql_conn = pymysql.connect(‘localhost, username, password, db_name, charset=‘utf8’)
# 刪除數(shù)據(jù)表的sql語句:
drop_table_sql = ‘drop table %s’ %table_name
cursor = pymysql_conn.cursor()
cursor.execute(drop_table_sql)
pymysql_conn.close()

刪除數(shù)據(jù)庫

from sqlalchemy_utils import drop_database
drop_database(db_url)  # db_url是通過sqlalchemy連接數(shù)據(jù)庫所使用的url
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踢京,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宦棺,更是在濱河造成了極大的恐慌瓣距,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代咸,死亡現(xiàn)場離奇詭異蹈丸,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門逻杖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋岁,“玉大人,你說我怎么就攤上這事荸百∥帕妫” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵够话,是天一觀的道長。 經(jīng)常有香客問我女嘲,道長畜份,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任欣尼,我火速辦了婚禮爆雹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愕鼓。我一直安慰自己顶别,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布拒啰。 她就那樣靜靜地躺著驯绎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谋旦。 梳的紋絲不亂的頭發(fā)上剩失,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音册着,去河邊找鬼拴孤。 笑死,一個胖子當(dāng)著我的面吹牛甲捏,可吹牛的內(nèi)容都是我干的演熟。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼司顿,長吁一口氣:“原來是場噩夢啊……” “哼芒粹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起大溜,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤化漆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钦奋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體座云,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡疙赠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朦拖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圃阳。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖璧帝,靈堂內(nèi)的尸體忽然破棺而出捍岳,到底是詐尸還是另有隱情,我是刑警寧澤裸弦,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站作喘,受9級特大地震影響理疙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泞坦,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一窖贤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰锁,春花似錦赃梧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锣险,卻和暖如春蹄皱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芯肤。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工巷折, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崖咨。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓锻拘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親击蹲。 傳聞我的和親對象是個殘疾皇子署拟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容