Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
見(jiàn)的登錄方式有以下兩種:
上面只是簡(jiǎn)單的描述,下面是詳細(xì)的針對(duì)兩種登錄方式的時(shí)候爬蟲(chóng)的處理方法
第一種情況
這種例子其實(shí)也比較多,現(xiàn)在很多網(wǎng)站的登錄都是第一種的方法,這里通過(guò)以github為例子:
分析頁(yè)面
獲取authenticity_token信息
我們都知道登錄頁(yè)面這里都是一個(gè)form表單提交,我可以可以通過(guò)谷歌瀏覽器對(duì)其進(jìn)行分析
如上圖我們找到了這個(gè)token信息
所以我們?cè)诘卿浿皯?yīng)該先通過(guò)代碼訪問(wèn)這個(gè)登錄頁(yè)面獲取這個(gè)authenticity_token信息
獲取登陸頁(yè)面的cookie信息
set-cookie這里是登錄頁(yè)面的cookie
分析登錄包獲取提交地址
當(dāng)我們輸入用戶名和密碼之后點(diǎn)擊提交,我們可以從包里找到如上圖的地址,就是post請(qǐng)求提交form的信息
請(qǐng)求的地址:https://github.com/session
請(qǐng)求的參數(shù)有:
"commit": "Sign in",
"utf8":"?",
"authenticity_token":“KM6Q0mM9FtI95wYsI/WU3BnaMbYrmV60c0YTQlZjBuAuYa193LP2Gd8BTCmQBSFvPFZRlk3/1TFOnOgGUdy7Ig==”,
"login":"hjzhaofan@163.com",
"password":"123"
從這里我們也可以看出提交參數(shù)中的“authenticity_token”,而這個(gè)參數(shù)就是需要我們從登陸頁(yè)面先獲取到。
當(dāng)我們登錄成功后:
再次訪問(wèn)github,這個(gè)時(shí)候cookie里就增加了兩個(gè)cookie信息,而這個(gè)信息是登錄后在增加的信息
所以如果我們想要通過(guò)程序登錄,我們就需要在登錄成功后再次獲取cookie信息
然后通過(guò)這個(gè)cookie去訪問(wèn)我們github的其他信息例如我們的個(gè)人信息設(shè)置頁(yè)面:
https://github.com/settings/profile
代碼實(shí)現(xiàn)
下面代碼實(shí)現(xiàn)了登錄并訪問(wèn)https://github.com/settings/repositories
import requests from bs4 import BeautifulSoup Base_URL = "https://github.com/login" Login_URL = "https://github.com/session" def get_github_html(url): ''' 這里用于獲取登錄頁(yè)的html,以及cookie :param url: https://github.com/login :return: 登錄頁(yè)面的HTML,以及第一次的cooke ''' response = requests.get(url) first_cookie = response.cookies.get_dict() return response.text,first_cookie def get_token(html): ''' 處理登錄后頁(yè)面的html :param html: :return: 獲取csrftoken ''' soup = BeautifulSoup(html,'lxml') res = soup.find("input",attrs={"name":"authenticity_token"}) token = res["value"] return token def gihub_login(url,token,cookie): ''' 這個(gè)是用于登錄 :param url: https://github.com/session :param token: csrftoken :param cookie: 第一次登錄時(shí)候的cookie :return: 返回第一次和第二次合并后的cooke ''' data= { "commit": "Sign in", "utf8":"?", "authenticity_token":token, "login":"你的github賬號(hào)", "password":"*****" } response = requests.post(url,data=data,cookies=cookie) print(response.status_code) cookie = response.cookies.get_dict() #這里注釋的解釋一下,是因?yàn)橹癵ithub是通過(guò)將兩次的cookie進(jìn)行合并的 #現(xiàn)在不用了可以直接獲取就行 # cookie.update(second_cookie) return cookie if __name__ == '__main__': html,cookie = get_github_html(Base_URL) token = get_token(html) cookie = gihub_login(Login_URL,token,cookie) response = requests.get("https://github.com/settings/repositories",cookies=cookie) print(response.text)
第二種情況
這里通過(guò)伯樂(lè)在線為例子,這個(gè)相對(duì)于第一種就比較簡(jiǎn)單了,沒(méi)有太多的分析過(guò)程直接發(fā)送post請(qǐng)求,然后獲取cookie,通過(guò)cookie去訪問(wèn)其他頁(yè)面,下面直接是代碼實(shí)現(xiàn)例子:
http://www.jobbole.com/bookmark/ 這個(gè)地址是只有登錄之后才能訪問(wèn)的頁(yè)面,否則會(huì)直接返回登錄頁(yè)面
這里說(shuō)一下:http://www.jobbole.com/wp-admin/admin-ajax.php是登錄的請(qǐng)求地址這個(gè)可以在抓包里可以看到
import requests def login(): url = "http://www.jobbole.com/wp-admin/admin-ajax.php" data = { "action": "user_login", "user_login":"zhaofan1015", "user_pass": '******', } response = requests.post(url,data) cookie = response.cookies.get_dict() print(cookie) url2 ="http://www.jobbole.com/bookmark/" response2 = requests.get(url2,cookies=cookie) print(response2.text) login()
做什么事情都需要不斷地堅(jiān)持下去,編程也一樣。現(xiàn)在python語(yǔ)言十分火熱,職場(chǎng)對(duì)python的需求也很高,薪資待遇都很棒。所以希望大家能夠堅(jiān)持學(xué)習(xí),‘剩’者為王,堅(jiān)持下來(lái)的人才有資格稱(chēng)王。如果你覺(jué)得本文對(duì)你的學(xué)習(xí)有幫助的話,不妨點(diǎn)個(gè)關(guān)注,我會(huì)持續(xù)更新。
網(wǎng)上爬取數(shù)據(jù)的時(shí)候通常需要注冊(cè)會(huì)員,然后登錄才能正常使用或下載數(shù)據(jù)。這些登錄的信息通常會(huì)存放在網(wǎng)站的cookie中。根據(jù)百度百科的定義,“Cookie 是一個(gè)保存在客戶機(jī)中的簡(jiǎn)單的文本文件, 這個(gè)文件與特定的 Web 文檔關(guān)聯(lián)在一起, 保存了該客戶機(jī)訪問(wèn)這個(gè)Web 文檔時(shí)的信息, 當(dāng)客戶機(jī)再次訪問(wèn)這個(gè) Web 文檔時(shí)這些信息可供該文檔使用。”
為了方便自動(dòng)化爬取數(shù)據(jù),我們可以將網(wǎng)站的登錄信息的cookie存儲(chǔ)在本地文件中,然后下次登錄時(shí),直接加載cookies即可迅速實(shí)現(xiàn)登錄。在Python中,獲取網(wǎng)站cookie的辦法有好多種,這里簡(jiǎn)單介紹較常用的selenium庫(kù),調(diào)用瀏覽器驅(qū)動(dòng)程序獲取最新的cookie,并模擬網(wǎng)站自動(dòng)登錄。
首先確保python成功安裝了selenium庫(kù),安裝命令如下:
pip install selenium
其次是要安裝對(duì)應(yīng)瀏覽器的驅(qū)動(dòng)程序,一般使用谷歌瀏覽器、火狐瀏覽器和Edge瀏覽器,它們對(duì)應(yīng)的驅(qū)動(dòng)程序分別為chromedriver.exe,geckodriver.exe,msedgedriver.exe,需要下載對(duì)應(yīng)瀏覽器版本的程序。例如我使用的谷歌瀏覽器版本為112.0.5615,我需要下載對(duì)應(yīng)版本的chromedriver.exe。具體安裝教程,可參考鏈接:https://www.bilibili.com/read/cv13873971
一切準(zhǔn)備后就可以開(kāi)始編寫(xiě)代碼了,這里使用Anaconda的Jupyter編寫(xiě)運(yùn)行命令。先導(dǎo)入selenium庫(kù)以及json,os庫(kù),selenium用于啟動(dòng)瀏覽器,json用于將cookie轉(zhuǎn)存為json格式,os用于將文件保存在本地,time用于強(qiáng)制程序等待若干時(shí)間。
from selenium import webdriver
import json,os,time
#選擇保存目錄
outdir = r'F:\MyProject\09Medicine'
#登錄的網(wǎng)址
douban_url = 'https://www.douban.com/'
#啟動(dòng)瀏覽器
browser = webdriver.Chrome()
#瀏覽器打開(kāi)網(wǎng)頁(yè)
browser.get(douban_url)
#等待30秒時(shí)間使你輸入登錄信息
time.sleep(30)
#瀏覽器登錄后獲取cookie
cookies = browser.get_cookies()
#將cookies保存在本地
with open(os.path.join(outdir,'cookies.txt'),mode='w') as f:
f.write(json.dumps(cookies))
#關(guān)閉瀏覽器
browser.close()
瀏覽器打開(kāi)豆瓣網(wǎng)首頁(yè)
這樣即可將網(wǎng)站登錄信息保存在當(dāng)?shù)亓恕O麓蔚卿洉r(shí)可直接調(diào)用本地cookie文件實(shí)現(xiàn)自動(dòng)登錄了。
#打開(kāi)保存的cookie文件
with open(r'F:\MyProject\09Medicine\cookies.txt',mode='r') as f:
cookies_file = f.read()
#將讀取的文件轉(zhuǎn)為json格式
cookie_list = json.loads(cookies_file)
#打開(kāi)瀏覽器
browser = webdriver.Chrome()
#輸入豆瓣網(wǎng)址
page_url = 'https://www.douban.com'
browser.get(page_url)
#網(wǎng)頁(yè)加載cookie
for cookie in cookie_list:
browser.add_cookie(cookie)
#需要刷新網(wǎng)頁(yè)才能登錄
browser.refresh()
#再輸入一次網(wǎng)址即可顯示登錄成功
browser.get(page_url)
使用cookie登錄的豆瓣網(wǎng)首頁(yè)
豆瓣網(wǎng)站的cookie反爬機(jī)制做得貌似比較好,一定時(shí)間后需要更新登錄的cookie才可重新自動(dòng)登錄。因此爬取的時(shí)候可定期更新cookie信息。
、小程序端調(diào)用wx.login
2、判斷用戶是否授權(quán)
3、小程序端訪問(wèn) wx.getUserInfo
4、小程序端js代碼:+
wx.login({
success: resp => {
// 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey, unionId
console.log(resp);
var that = this;
// 獲取用戶信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已經(jīng)授權(quán),可以直接調(diào)用 getUserInfo 獲取頭像昵稱(chēng),不會(huì)彈框
wx.getUserInfo({
success: userResult => {
var platUserInfoMap = {}
platUserInfoMap["encryptedData"] = userResult.encryptedData;
platUserInfoMap["iv"] = userResult.iv;
wx.request({
url: 'http://127.0.0.1:5000/user/wxlogin',
data: {
platCode: resp.code,
platUserInfoMap: platUserInfoMap,
},
header: {
"Content-Type": "application/json"
},
method: 'POST',
dataType:'json',
success: function (res) {
console.log(res)
wx.setStorageSync("userinfo", res.userinfo) //設(shè)置本地緩存
},
fail: function (err) { },//請(qǐng)求失敗
complete: function () { }//請(qǐng)求完成后執(zhí)行的函數(shù)
})
}
})
}
}
})
}
})
5、后端服務(wù)器訪問(wèn)code2session,通過(guò)code2Session這個(gè)api接口來(lái)獲取真正需要的微信用戶的登錄態(tài) session_key 和 openid 和 unionid
6、后端服務(wù)器校驗(yàn)用戶信息,對(duì) encryptedData 解密
微信小程序登錄后獲得session_key后,返回了encryptedData,iv的數(shù)據(jù),其中encryptedData解密后包含了用戶的信息,解密后的json格式如下:
{
"openId": "OPENID",
"nickName": "NICKNAME",
"gender": GENDER,
"city": "CITY",
"province": "PROVINCE",
"country": "COUNTRY",
"avatarUrl": "AVATARURL",
"unionId": "UNIONID",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
from Crypto.Cipher import AES 這邊一般會(huì)遇到 ModuleNotFoundError:No module named "Crypto" 錯(cuò)誤
(1)執(zhí)行 pip3 install pycryptodome
(2)如果還是提示沒(méi)有該模塊,那就虛擬環(huán)境目錄 Lib—-site-package 中查看是否有 Crypto文件夾,這時(shí)你應(yīng)該看到有 crypto 文件夾,將其重命名為 Crypto 即可
import base64
import json
from Crypto.Cipher import AES
class WXBizDataCrypt:
def __init__(self, appId, sessionKey):
self.appId = appId
self.sessionKey = sessionKey
def decrypt(self, encryptedData, iv):
# base64 decode
sessionKey = base64.b64decode(self.sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)
cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
if decrypted['watermark']['appid'] != self.appId:
raise Exception('Invalid Buffer')
return decrypted
def _unpad(self, s):
return s[:-ord(s[len(s)-1:])]
8、Flask的 /user/wxlogin api代碼:
import json,requests
from WXBizDataCrypt import WXBizDataCrypt
from flask import Flask
@app.route('/user/wxlogin', methods=['GET','POST'])
def user_wxlogin():
data = json.loads(request.get_data().decode('utf-8')) # 將前端Json數(shù)據(jù)轉(zhuǎn)為字典
appID = 'appID' # 開(kāi)發(fā)者關(guān)于微信小程序的appID
appSecret = 'appSecret' # 開(kāi)發(fā)者關(guān)于微信小程序的appSecret
code = data['platCode'] # 前端POST過(guò)來(lái)的微信臨時(shí)登錄憑證code
encryptedData = data['platUserInfoMap']['encryptedData']
iv = data['platUserInfoMap']['iv']
req_params = {
'appid': appID,
'secret': appSecret,
'js_code': code,
'grant_type': 'authorization_code'
}
wx_login_api = 'https://api.weixin.qq.com/sns/jscode2session'
response_data = requests.get(wx_login_api, params=req_params) # 向API發(fā)起GET請(qǐng)求
resData = response_data.json()
openid = resData ['openid'] # 得到用戶關(guān)于當(dāng)前小程序的OpenID
session_key = resData ['session_key'] # 得到用戶關(guān)于當(dāng)前小程序的會(huì)話密鑰session_key
pc = WXBizDataCrypt(appID, session_key) #對(duì)用戶信息進(jìn)行解密
userinfo = pc.decrypt(encryptedData, iv) #獲得用戶信息
print(userinfo)
'''
下面部分是通過(guò)判斷數(shù)據(jù)庫(kù)中用戶是否存在來(lái)確定添加或返回自定義登錄態(tài)(若用戶不存在則添加;若用戶存在,返回用戶信息)
--------略略略略略略略略略-------------
這部分我就省略啦,數(shù)據(jù)庫(kù)中對(duì)用戶進(jìn)行操作
'''
return json.dumps
({
"code": 200, "msg": "登錄成功","userinfo":userinfo}, indent=4, sort_keys=True, default=str, ensure_ascii=False)
到此這篇關(guān)于Python Flask微信小程序登錄詳解及登錄api實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python Flask微信小程序登錄詳解及登錄api實(shí)現(xiàn)內(nèi)容請(qǐng)搜索我們以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持我們!
時(shí)間:2020-06-05
用戶資料頁(yè)面 在用戶資料頁(yè)面,基本上沒(méi)有什么特別要強(qiáng)調(diào)和介紹的新概念.只需要?jiǎng)?chuàng)建一個(gè)含有HTML的新視圖函數(shù)模板頁(yè)面即可. 下面是視圖函數(shù)(項(xiàng)目目錄/views.py): @app.route('/user/<nickname>') @login_required def user(nickname): user = User.query.filter_by(nickname = nickname).first() if user == None: flash('不存在用戶:' + nickn
前言: 近期需要開(kāi)發(fā)一個(gè)打分的微信小程序,涉及到與后臺(tái)服務(wù)器的數(shù)據(jù)交互,因?yàn)闃I(yè)務(wù)邏輯相對(duì)簡(jiǎn)單,故選擇Python的輕量化web框架Flask來(lái)搭建后臺(tái)程序.因?yàn)槭浅醮谓佑|小程序,經(jīng)過(guò)一番摸索和嘗試,個(gè)人覺(jué)得的微信小程序與后臺(tái)的交互有點(diǎn)像ajax,所以有ajax開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)開(kāi)發(fā)小程序應(yīng)該很容易上手,因?yàn)楸疚闹刂v解后臺(tái)程序的搭建,所以,微信小程序的前端開(kāi)發(fā)將一筆帶過(guò),有興趣學(xué)習(xí)小程序前端語(yǔ)言的同學(xué)可移步網(wǎng)易云課堂的一套快速入門(mén)課程<輕松玩轉(zhuǎn)微信小程序>. 分三步講解微信小程序與Python后臺(tái)
表單是讓用戶與我們的網(wǎng)頁(yè)應(yīng)用程序交互的基本元素.Flask 本身并不會(huì)幫助我們處理表單,但是 Flask-WTF 擴(kuò)展讓我們?cè)谖覀兊?Flask 應(yīng)用程序中使用流行的 WTForms 包.這個(gè)包使得定義表單和處理提交容易一些. Flask-WTF 我們想要使用 Flask-WTF 做的第一件事情(在安裝它以后,GitHub項(xiàng)目頁(yè):https://github.com/lepture/flask-wtf )就是在 myapp.forms 包中定義一個(gè)表單. # ourapp/forms.py fr
回顧 在前面的系列章節(jié)中,我們創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)并且學(xué)著用用戶和郵件來(lái)填充,但是到現(xiàn)在我們還沒(méi)能夠植入到我們的程序中. 兩章之前,我們已經(jīng)看到怎么去創(chuàng)建網(wǎng)絡(luò)表單并且留下了一個(gè)實(shí)現(xiàn)完全的登陸表單. 在這篇文章中,我們將基于我門(mén)所學(xué)的網(wǎng)絡(luò)表單和數(shù)據(jù)庫(kù)來(lái)構(gòu)建并實(shí)現(xiàn)我們自己的用戶登錄系統(tǒng).教程的最后我們小程序會(huì)實(shí)現(xiàn)新用戶注冊(cè),登陸和退出的功能. 為了能跟上這章節(jié),你需要前一章節(jié)最后部分,我們留下的微博程序.請(qǐng)確保你的程序已經(jīng)正確安裝和運(yùn)行. 在前面的章節(jié),我們開(kāi)始配置我們將要用到的Flask擴(kuò)展.為了登
用到的一些知識(shí)點(diǎn):Flask-SQLAlchemy.Flask-Login.Flask-WTF.PyMySQL 這里通過(guò)一個(gè)完整的登錄實(shí)例來(lái)介紹,程序已經(jīng)成功運(yùn)行,在未登錄時(shí)攔截了success.html頁(yè)面跳轉(zhuǎn)到登錄頁(yè)面,登錄成功后才能訪問(wèn)success. 以下是項(xiàng)目的整體結(jié)構(gòu)圖: 首先是配置信息,配置了數(shù)據(jù)庫(kù)連接等基本的信息,config.py DEBUG = True SQLALCHEMY_ECHO = False SQLALCHEMY_DATABASE_URI = 'mysql+pymy
一.概述 公司需要通過(guò)網(wǎng)頁(yè)用戶認(rèn)證登錄實(shí)現(xiàn)上網(wǎng),網(wǎng)絡(luò)設(shè)備判斷當(dāng)前帳號(hào)12小時(shí)沒(méi)有沒(méi)上網(wǎng)將會(huì)自動(dòng)斷開(kāi)帳號(hào)上網(wǎng),每天早上上班第一件事就是打開(kāi)用戶認(rèn)證網(wǎng)頁(yè)輸入. 用戶名與密碼,有時(shí)候要家里通過(guò)teamview遠(yuǎn)程控制軟件連接公司電腦,想讓公司電腦24小時(shí)在線,最后通過(guò)python實(shí)現(xiàn)了自動(dòng)登錄. 代碼: #_*_ coding:utf-8 _*_ import requests,time s=requests.session() data = [ ('opr', 'pwdLogin'), ('user
Python操作Mysql 最近在學(xué)習(xí)python,這種腳本語(yǔ)言毫無(wú)疑問(wèn)的會(huì)跟數(shù)據(jù)庫(kù)產(chǎn)生關(guān)聯(lián),因此這里介紹一下如何使用python操作mysql數(shù)據(jù)庫(kù).我python也是零基礎(chǔ)學(xué)起,所以本篇博客針對(duì)的是python初學(xué)者,大牛可以選擇繞道. 另外,本篇基于的環(huán)境是Ubuntu13.10,使用的python版本是2.7.5. MYSQL數(shù)據(jù)庫(kù) MYSQL是一個(gè)全球領(lǐng)先的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng).它是一個(gè)支持多用戶.多線程的數(shù)據(jù)庫(kù)管理系統(tǒng),與Apache.PHP.Linux共同組成LAMP平臺(tái),在web應(yīng)
用python編寫(xiě)數(shù)據(jù)庫(kù)的代碼很方便,但是如果不想自己寫(xiě)sql語(yǔ)句,其實(shí)還有更多的討巧辦法.使用webpy的db庫(kù)就是不錯(cuò)的一個(gè)選擇.當(dāng)然為了使用webpy的db,之前你還需要安裝MySQLdb,其他的就不需要做什么了. 1.安裝MySQLdb庫(kù) sudo apt-get install python-MySQLdb 2.安裝webpy sudo apt-get install python-webpy 3.連接數(shù)據(jù)庫(kù) import web db = web.database(dbn='mysq
SQLAlchemy是Python編程語(yǔ)言下的一款開(kāi)源軟件,提供了SQL工具包及對(duì)象關(guān)系映射(ORM)工具,使用MIT許可證發(fā)行.SQLAlchemy首次發(fā)行于2006年2月,并迅速地在Python社區(qū)中最廣泛使用的ORM工具之一,不亞于Django的ORM框架. 本文將介紹如何使用SQLAlchemy操作MySQL,完成基礎(chǔ)的表創(chuàng)建,表格數(shù)據(jù)的新增.查詢.修改.刪除(CRUD)等操作. 首先我們需要確認(rèn)當(dāng)前的Python環(huán)境下已經(jīng)安裝sqlalchemy和pymysql模塊. 新建表格 我們使
最近剛剛開(kāi)始學(xué)習(xí)mysql,所以就寫(xiě)了這個(gè)很基本的用戶注冊(cè)登錄的功能來(lái)練練手.雖然這個(gè)很簡(jiǎn)單,但是我還是看到了自己學(xué)習(xí)的進(jìn)步,很開(kāi)心.哈哈哈. 這里要注意數(shù)據(jù)表的建立: 直接上代碼吧,里面注釋很詳細(xì)了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以實(shí)現(xiàn)用戶的注冊(cè)和登錄 */ private static String username;//用戶登錄注冊(cè)的姓名 privat
Blog Posts的提交 讓我們從簡(jiǎn)單的開(kāi)始.首頁(yè)上必須有一張用戶提交新的post的表單. 首先我們定義一個(gè)單域表單對(duì)象(fileapp/forms.py): class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我們把這個(gè)表單添加到template中(fileapp/templates/index.html): <!-- extend base layout --> {% extends &
本文實(shí)例講述了flask 框架操作MySQL數(shù)據(jù)庫(kù).分享給大家供大家參考,具體如下: 一.創(chuàng)建數(shù)據(jù)庫(kù)表格 """ Created on 19-10-8 @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:創(chuàng)建表格 """ import pymysql server = '127.0.0.1' user = 'root' password = 'password' # 連接數(shù)據(jù)庫(kù)
1. MySQLdb 的使用 (1) 什么是MySQLdb? MySQLdb 是用于 Python 連接 MySQL 數(shù)據(jù)庫(kù)的接口,它實(shí)現(xiàn)了 Python 數(shù)據(jù)庫(kù) API 規(guī)范 V2.0,基于 MySQL C API 上建立的. (2) 源碼安裝 MySQLdb: https://pypi.python.org/pypi/MySQL-python $ tar zxvf MySQL-python-*.tar.gz $ cd MySQL-python-* $ python setup.py buil
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。