99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀當(dāng)Python需要與數(shù)據(jù)庫(kù)交互時(shí),這個(gè)模塊就變得超級(jí)好用
當(dāng)Python需要與數(shù)據(jù)庫(kù)交互時(shí),這個(gè)模塊就變得超級(jí)好用
2022-04-06
收藏

作者:俊欣

來(lái)源:關(guān)于數(shù)據(jù)分析與可視化

今天小編和大家來(lái)聊一下SQLALchemy這個(gè)模塊,該模塊是Python當(dāng)中最有名的ORM框架,該框架是建立在數(shù)據(jù)庫(kù)API之上,使用關(guān)系對(duì)象映射進(jìn)行數(shù)據(jù)庫(kù)的操作,簡(jiǎn)而言之便是:將對(duì)象轉(zhuǎn)換成SQL,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。

看到這里,相信不少的讀者可能會(huì)感覺(jué)到云里霧里,我們就通過(guò)一個(gè)簡(jiǎn)單的案例在說(shuō)明一下吧。例如我們想要在mysql當(dāng)中新建一個(gè)表格,我們首先需要連接上數(shù)據(jù)庫(kù),代碼如下

# 連接數(shù)據(jù)庫(kù) sql_connect = 'mysql+pymysql://root:123456@localhost:3306/sql_prac?charset=utf8' engine = create_engine(sql_connect) DBSession = sessionmaker(bind=engine) # 創(chuàng)建對(duì)象的基類: BaseModel = declarative_base()

定義表結(jié)構(gòu)

對(duì)于新創(chuàng)建的表格,我們命名為是“User”,同時(shí)我們還需要定義表結(jié)構(gòu),代碼如下

#定義對(duì)象 class User(BaseModel): # 表名 __tablename__ = 'user' # 表結(jié)構(gòu),其中ID設(shè)為是主鍵,并且是自動(dòng)增加的 id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(20))
    age = Column(Integer)

創(chuàng)建以及刪除表

對(duì)于創(chuàng)建表以及刪除表的操作,代碼如下

#創(chuàng)建映射的數(shù)據(jù)庫(kù)表 def init_db(): BaseModel.metadata.create_all(engine) #刪除映射的數(shù)據(jù)庫(kù)表 def drop_db(): BaseModel.metadata.drop_all(engine)

插入數(shù)據(jù)

我們可以嘗試往新建的表格當(dāng)中插入幾個(gè)值,代碼如下

def insert_data(name_1, age_1): # 創(chuàng)建session對(duì)象,相當(dāng)于MySQLdb里面的游標(biāo) session = DBSession() # 創(chuàng)建新User對(duì)象: new_user = User(name=name_1, age=age_1) # 添加到session: session.add(new_user) # 提交添加數(shù)據(jù)的操作 session.commit() # 關(guān)閉session session.close() if __name__ == "__main__":
    insert_data(name_1="Mike", age_1=20)
    insert_data(name_1="John", age_1=35)
    .......

運(yùn)行后的結(jié)果如下圖所示

當(dāng)Python需要與數(shù)據(jù)庫(kù)交互時(shí),這個(gè)模塊就變得超級(jí)好用

查詢

要是我們想要查詢表格中的數(shù)據(jù),可以這么來(lái)做

# 創(chuàng)建Session: session = DBSession() # 創(chuàng)建Query查詢,filter是where條件,最后調(diào)用one()返回唯一行,如果調(diào)用all()則返回所有行: user = session.query(User).filter(User.name == 'Tom').one() # 打印類型和對(duì)象的name屬性和age屬性: print(user.name, user.age) # 關(guān)閉Session: session.close()

要是調(diào)用的是all()則返回所有行,因此我們需要通過(guò)for循環(huán)遍歷出來(lái)的結(jié)果然后打印,代碼如下

users = session.query(User).filter(User.name == 'John').all() for u in users: print(u.name, u.age)

更新和刪除數(shù)據(jù)

我們嘗試來(lái)更新表格中的一些數(shù)據(jù),代碼如下

# 創(chuàng)建Session: session = DBSession() # 可以進(jìn)行多條數(shù)據(jù)更新 user = session.query(User).filter(User.id == 3) user.update({User.age: 30}) # 提交數(shù)據(jù) session.commit() # 關(guān)閉Session session.close()

通過(guò)“ID”來(lái)鎖定要更新的數(shù)據(jù)的位置,然后我們通過(guò)調(diào)用update()方法將其年齡改成指定的值。與此同時(shí)我們還可以來(lái)刪除表格當(dāng)中的一些值,代碼如下

# 創(chuàng)建Session session = DBSession() # 刪除哪些數(shù)據(jù) user = session.query(User).filter(User.id == 5).one()
session.delete(user) # 提交數(shù)據(jù) session.commit() # 關(guān)閉session session.close()

同樣我們也是通過(guò)“ID”來(lái)鎖定要?jiǎng)h除數(shù)據(jù)的位置,然后調(diào)用delete()方法。

直接運(yùn)行SQL語(yǔ)句

當(dāng)然我們?cè)趧?chuàng)建session之后,我們也可以在里面直接運(yùn)行SQL語(yǔ)句,例如我們想要查看一下總共有哪些數(shù)據(jù)庫(kù),代碼如下

session = DBSession() print(session.execute('show databases').fetchall())
session.close()

或者我們是想返回表格中的所有數(shù)據(jù),代碼如下

session = DBSession() print(session.execute('select * from user').fetchall())
session.close()

DataFrame到MySQL數(shù)據(jù)庫(kù)

我們同時(shí)也可以批量的將excel或者csv文件當(dāng)中的數(shù)據(jù)批量的導(dǎo)入到MySQL數(shù)據(jù)庫(kù)當(dāng)中,我們先通過(guò)Pandas讀取文件中的數(shù)據(jù),代碼如下

sql_connect = 'mysql+pymysql://用戶名:密碼@ip地址:端口號(hào)/數(shù)據(jù)庫(kù)名稱?charset=utf8' engine = create_engine(sql_connect)
df = pd.read_excel("sqlalchemy_test1.xlsx")
df.to_sql("user", engine, index=False, if_exists='append')

當(dāng)然我們也可以從數(shù)據(jù)庫(kù)的某個(gè)表格當(dāng)中來(lái)讀取數(shù)據(jù),代碼如下

df = pd.read_sql("表格名", engine) print(df.head())

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }