python基礎學習6-mongodb、sys、介面開發、操作excel

來源:互聯網
上載者:User

標籤:目錄   尋找   dfs   名稱   url   lin   語句   開啟   ODB   

1       mysql補充

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)    #直接擷取的資料轉換為字典格式的

cur.description                   #直接擷取的描述資訊

fileds = [filed[0] for filed in cur.description]        #列表產生式,擷取到第一行所有的欄位

 

import pymysql,xlwt
conn = pymysql.connect(host=‘1.1.1.1‘,user=‘jxz‘,password=‘123456‘,db=‘jxz‘,port=3306,charset=‘utf8‘)
# cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #直接擷取的資料轉換為字典格式的
cur = conn.cursor() #寫excel用預設的二維數組即可,因為用字典的話順序不固定,資料會寫錯
cur.execute(‘select * from app_student limit 10‘)
print(cur.description) #表的資訊
fileds = [filed[0] for filed in cur.description] #列表產生式,擷取到所有的欄位
print(fileds)
# print(cur.fetchall())
data = list(cur.fetchall())
data .insert(0,fileds) #insert只是插入指定位置的資料
print(data)
book = xlwt.Workbook()
sheet = book.add_sheet(‘sheet1‘)
#方法一:
# for index,line_data in enumerate(data):
# for index2,col_data in enumerate(line_data):
# sheet.write(index,index2,col_data)
#一個一個儲存格寫,先寫第一行的每個儲存格
#寫每一行的時候,行號是不變的,列在變

#方法二:此方法需要定義一個行和一個列去控制
line = 0 #行號

for d in data: #控制行
col = 0 # 列號
for col_data in d: #控制列
sheet.write(line,col,col_data)
col+=1
line+=1

book.save(‘ex.xls‘)

cur.close()
conn.close()


import pymysql,xlwt
def mydb(sql):
conn = pymysql.connect(host=‘1.1.1.1‘,user=‘jxz‘,password=‘123456‘,port=3306,db=‘jxz‘,charset=‘utf8‘,autocommit=True)
cur = conn.cursor()
cur.execute(sql)
fileds = [filed[0] for filed in cur.description] #列表產生式,擷取到第一行表頭資料資訊
data = list(cur.fetchall()) #將擷取的資料直接轉換成元組
data.insert(0,fileds) #將第一行擷取到的列表插入到data列表的第1個位置
return data
print(mydb(‘select * from app_student limit 10‘))

def write_excel(excel_name):
book = xlwt.Workbook
sheet = book.add_sheet(‘sheet1‘)
a = ‘select * from app_student‘
for index,line_data in enumerate(mydb(sql=a)):
for index2,col_data in enumerate(line_data):
sheet.write(index,index2,col_data)
book.save(excel_name)

2       sys模組

import sys

print(sys.argv)     #把運行python檔案的時候,傳入的參數都放到argv裡面

 

if len(command)>1:
excel = command[1]
print(‘用例已經運行‘,excel)
else:
print(‘運行python檔案的時候,需要傳入一個用例名稱,例如:python run_case.py case.xls‘)

 

匯入模組的順序(重點)

1、從目前的目錄下找python檔案

2、如果目前的目錄下沒有,則去python的環境變數(此處不是作業系統那設定的環境變數)裡面找這個python檔案,print(sys.path) #查看python自己的環境變數

 

匯入模組的實質(重點)

把這個模組的代碼從頭到尾執行一次

 

 

name = ‘hahaha‘

def conn_db(name):

print(‘this is a funcation‘,name)

print(__name__)

if __name__ == ‘__main__‘:      #在其他python檔案中匯入該模組時,它不會執行if __name__ == ‘__main__‘下面的代碼

conn_db(‘b檔案‘)

 

 

sys.path.append(r‘D:\pythonscript\day7\tools‘)              #如果建立的python檔案不在環境變數中,可以通過此方法臨時設定環境變數使用

 

3       mongodb

import pymongo

client = pymongo.MongoClient(host=‘118.24.3.40‘,port=27017)

db = client[‘zhouyifan‘]        #選擇資料庫,如果不存在直接建立

collection = db[‘stu_info‘]

db.zhouyifan.insert({‘name‘:‘test1‘,‘sex‘:‘男‘,‘age‘:18})

db[‘stu_info‘].insert({‘url‘:‘http://www.jd.com‘,‘title‘:‘jd.com‘,‘addr‘:‘beijing‘})   #插入

print(list(db[‘stu_info‘].find({‘title‘:‘百度‘})))        #尋找,需要轉換成list才能列印出來

for d in db[‘stu_info‘].find({‘title‘:‘百度‘}):     #使用迴圈列印出來的是字典

     print(d)

 

collection.delete_one({‘title‘:‘百度‘})       #如果有多條的話,只會刪除一條

collection.delete_many()            #會刪除多條

print(collection)

 

collection.update({‘url‘:‘http://www.jd.com‘,‘title‘:‘www.jd.com‘},{‘url‘:‘http://www.jd.com‘,‘title‘:‘www.jd.com‘,‘addr‘:‘亦莊‘})    #更改

 

4       介面開發

介面開發的作用:

1、  知道介面是怎麼開發的

2、  避免別人操作你的資料庫

3、  mock服務(即類比一個服務,保證測試流程能夠順利進行)

 

import sys
print(sys.path) #查看python自己的環境變數

 

python環境變數設定如下:

方法一:

快速將整個目錄設定python的環境變數(如下方法只能在pycharm中好用,如果將代碼拷貝給其他人使用,則設定的環境變數是不生效的):

 

 

第二種設定環境變數的方法如下:

import sys,os

base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))     #環境變數設定必須在匯入自己寫的模組之前,自動擷取當前檔案向上兩級檔案夾的路徑

sys.path.insert(0,base_path)        #將動態擷取到的環境變數插入到最前面,這樣匯入模組更快

 

import sys,os
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__是當前這個python檔案的絕對路徑,
# os.path.abspath(__file__)通過abspath方法將擷取的路徑分隔字元進行轉換
#再通過兩個dirname擷取到父目錄
print(base_path)
sys.path.insert(0,base_path)

 

下面是從自己寫的模組匯入介面模組:

from lib.interface import server

from conf.setting import SERVER_PORT

server.run(host=‘0.0.0.0‘,port=SERVER_PORT,debug=True)      #設定host=0.0.0.0就可以在同一區域網路內其他電腦能訪問了,如果不指定host,則只能本機訪問

 

 

name = ‘hahaha‘
def conn_db(name):
print(‘this is a funcation‘,name)

print(‘__name__‘,__name__)
if __name__ == ‘__main__‘: #在其他python檔案中匯入該模組時,它不會執行if __name__ == ‘__main__‘下面的代碼
conn_db(‘b檔案‘)

 

介面開發樣本:

import flask
import json
import pymysql
import hashlib
server = flask.Flask(__name__) #把當前的python檔案當做一個服務,__name__表示main

def my_db(sql,port=3306,charset=‘utf8‘):
ip, user, passwd, db = ‘1.1.1.1‘,‘jxz‘,‘123456‘,‘jxz‘
conn = pymysql.connect(host=ip,user=user,
password=passwd,db=db,
port=port,charset=charset,autocommit=True)
cur = conn.cursor()
sql=sql.strip()
cur.execute(sql)
sqlstart = sql[:6].lower() #取sql的開頭6位,轉換為小寫
if sqlstart.startswith(‘select‘) or sqlstart.startswith(‘insert‘): #判斷是selec或show的語句擷取對應結果
data = cur.fetchall()
else: #加else是為了下面的return不報錯
data = ‘ok‘
cur.close()
conn.close()
return data

def my_md5(s):
m = hashlib.md5(s.encode())
return m.hexdigest()

@server.route(‘/login‘,methods=[‘get‘,‘post‘])
def login():
username = flask.request.values.get(‘username‘) #是從用戶端發送過來的資料
pwd = flask.request.values.get(‘password‘)
# flask.request.cookies.get(‘ssss‘) #擷取cookie
# flask.request.headers.get(‘tttt‘) #擷取headers
# json_data = flask.request.json #擷取入參是json類型的資料
if username==‘test1‘and pwd==‘123456‘:
res = {"code":1000,"msg":"登入成功","sing":"dfsdfsdfsdfsdf"}
else:
res = {"code":2000,"msg":"帳號/密碼錯誤"}
return json.dumps(res, ensure_ascii=False)

@server.route(‘/register‘,methods=[‘post‘])
def reg():
username = flask.request.values.get(‘username‘)
pwd = flask.request.values.get(‘password‘)
cpwd = flask.request.values.get(‘cpassword‘)

if username and pwd and cpwd:
sql1 = ‘select * from nhy where name="%s";‘ %username
sql_res = my_db(sql1)
if sql_res:
res = {"code":2001,"msg":"該使用者登入"}
else:
if pwd==cpwd:
md_pwd = my_md5(pwd)
sql2 = ‘insert into nhy (name,pwd) value("%s","%s");‘ %(username,md_pwd)
sql_res = my_db(sql2)
res = {"code": 1000, "msg": "註冊成功"}
else:
res = {"code": 2002, "msg": "兩次密碼輸入不相同"}
else:
res = {"code":2002,"msg":"必填參數未填,請查看介面文檔!"}
return json.dumps(res, ensure_ascii=False)

server.run(port=8989,debug=True) #啟動服務,此項需要注意,啟動該服務之後如果修改指令碼再次運行直接重啟即可,不能再次點擊右鍵運行,否則會報介面衝突,因為原有啟動並執行服務未停止

 

 

5       修改excel

import xlrd

from xlutils import copy        #修改excel需要匯入該模組

book1 = xlrd.open_workbook(‘ex.xls‘)        #1、開啟原來的excel

new_book = copy.copy(book1)                 #2、拷貝一個新的excel

sheet = new_book.get_sheet(0)              #3、擷取第一個sheet頁

sheet.write(1,3,‘18‘)

sheet.write(1,1,‘xiaobai‘)

new_book.save(‘ex.xls‘)

 

6       操作excel

#xlwt 只能寫excel

#xlrd 只能讀excel

import xlrd

book = xlrd.open_workbook(‘ex.xls‘)

sheet = book.sheet_by_index(0)      #通過sheet索引擷取sheet

# sheet = book.sheet_by_name(‘sheet1‘)      #通過sheet名稱擷取sheet

print(book.nsheets)     #擷取到excel中總共有多少個sheet頁

 

print(sheet.cell(0,0).value)    #指定行和列擷取某個儲存格裡的內容

print(sheet.cell(0,1).value)

 

print(sheet.row_values(0))      #擷取某一行的資料

print(sheet.nrows)      #擷取excel表中總共有多少行

python基礎學習6-mongodb、sys、介面開發、操作excel

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.