前言html
好幾天沒更由於寒假放假回家放鬆了幾天 嘿嘿 今天繼續開始啓動學習模式。python
python數據庫編程mysql
PyMySQL 是在 Python3.x 版本中用於鏈接 MySQL 服務器的一個庫,Python2中則使用mysqldb。程序員
PyMySQL 遵循 Python 數據庫 API v2.0 規範,幷包含了 pure-Python MySQL 客戶端庫。sql
$ pip3 install PyMySQL
connection 對象支持的方法:數據庫
cursor對象支持的方法:編程
eg:api
1 db_connection = pymysql.connect( 2 host='127.0.0.1', 3 user='xxxx', 4 password='xxxx', 5 database='python2test', 6 charset='utf8' 7 ) 8 cursor=db.cursor() 9 cursor.execute("SELECT VERSION()") 10 data=cursor.fetchone() 11 print(data) 12 db.close()
利用python建立新的數據庫表服務器
1 import pymysql 2 3 db = pymysql.connect( 4 host='127.0.0.1', 5 port=3306, 6 user='root', 7 passwd='xiaohua', 8 db='test' 9 ) 10 11 cursor=db.cursor() 12 cursor.execute("SELECT VERSION()") 13 sql="""CREATE TABLE XIAOHUA ( 14 FIRST_NAME CHAR(20) NOT NULL, 15 LAST_NAME CHAR(20), 16 AGE INT, 17 SEX CHAR(1), 18 INCOME FLOAT )""" 19 cursor.execute(sql) 20 db.close()
參考學習:https://www.cnblogs.com/weizt/p/8432734.html網絡
https://www.runoob.com/python3/python3-mysql.html
python 網絡編程
套接字是一種具備"通訊端點"概念的計算機網絡數據結構,網絡化的應用程序在任何通信以前都必須建立套接字
python支持:AF_UNIX,AF_NETLINK和AF_INEF,其中AF_INET是基於網絡的套接字
網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一端稱爲一個socket。
創建網絡通訊鏈接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員作網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通訊的能力。
傳輸層實現端到端的通訊,所以,每個傳輸層鏈接有兩個端點。那麼,傳輸層鏈接的端點是什麼呢?不是主機,不是主機的IP地址,不是應用進程,也不是傳輸層的協議端口。傳輸層鏈接的端點叫作套接字(socket)。
Socket最初是加利福尼亞大學Berkeley分校爲Unix系統開發的網絡通訊接口。後來隨着TCP/IP網絡的發展,Socket成爲最爲通用的應用程序接口,也是在Internet上進行應用開發最爲通用的API。
爲了知足不一樣的通訊程序對通訊質量和性能的要求,通常的網絡系統提供了三種不一樣類型的套接字,以供用戶在設計網絡應用程序時根據不一樣的要求來選擇。這三種套接爲流式套接字(SOCK-STREAM)、數據報套接字(SOCK-DGRAM)和原始套接字(SOCK-RAW)。
套接字socket的使用
服務端代碼
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 # 文件名:server.py 4 5 import socket # 導入 socket 模塊 6 7 s = socket.socket() # 建立 socket 對象 8 host = '192.168.233.132' 9 port = 12345 # 設置端口 10 s.bind((host, port)) # 綁定端口 11 12 s.listen(5) # 等待客戶端鏈接 13 while True: 14 c,addr = s.accept() # 創建客戶端鏈接 15 print '鏈接地址:', addr 16 c.send('歡迎訪問菜鳥教程!') 17 c.close() # 關閉鏈接
客戶端
1 #!/usr/bin/python 2 3 import socket # 導入 socket 模塊 4 s = socket.socket() # 建立 socket 對象 5 host = '192.168.233.132' # 獲取本地主機名 6 port = 12343 # 設置端口號 7 8 s.connect((host, port)) 9 print s.recv(1024) 10 s.close() 11
函數 | 描述 |
---|---|
服務器端套接字 | |
s.bind() | 綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址。 |
s.listen() | 開始TCP監聽。backlog指定在拒絕鏈接以前,操做系統能夠掛起的最大鏈接數量。該值至少爲1,大部分應用程序設爲5就能夠了。 |
s.accept() | 被動接受TCP客戶端鏈接,(阻塞式)等待鏈接的到來 |
客戶端套接字 | |
s.connect() | 主動初始化TCP服務器鏈接,。通常address的格式爲元組(hostname,port),若是鏈接出錯,返回socket.error錯誤。 |
s.connect_ex() | connect()函數的擴展版本,出錯時返回出錯碼,而不是拋出異常 |
公共用途的套接字函數 | |
s.recv() | 接收TCP數據,數據以字符串形式返回,bufsize指定要接收的最大數據量。flag提供有關消息的其餘信息,一般能夠忽略。 |
s.send() | 發送TCP數據,將string中的數據發送到鏈接的套接字。返回值是要發送的字節數量,該數量可能小於string的字節大小。 |
s.sendall() | 完整發送TCP數據,完整發送TCP數據。將string中的數據發送到鏈接的套接字,但在返回以前會嘗試發送全部數據。成功返回None,失敗則拋出異常。 |
s.recvfrom() | 接收UDP數據,與recv()相似,但返回值是(data,address)。其中data是包含接收數據的字符串,address是發送數據的套接字地址。 |
s.sendto() | 發送UDP數據,將數據發送到套接字,address是形式爲(ipaddr,port)的元組,指定遠程地址。返回值是發送的字節數。 |
s.close() | 關閉套接字 |
s.getpeername() | 返回鏈接套接字的遠程地址。返回值一般是元組(ipaddr,port)。 |
s.getsockname() | 返回套接字本身的地址。一般是一個元組(ipaddr,port) |
s.setsockopt(level,optname,value) | 設置給定套接字選項的值。 |
s.getsockopt(level,optname[.buflen]) | 返回套接字選項的值。 |
s.settimeout(timeout) | 設置套接字操做的超時期,timeout是一個浮點數,單位是秒。值爲None表示沒有超時期。通常,超時期應該在剛建立套接字時設置,由於它們可能用於鏈接的操做(如connect()) |
s.gettimeout() | 返回當前超時期的值,單位是秒,若是沒有設置超時期,則返回None。 |
s.fileno() | 返回套接字的文件描述符。 |
s.setblocking(flag) | 若是flag爲0,則將套接字設爲非阻塞模式,不然將套接字設爲阻塞模式(默認值)。非阻塞模式下,若是調用recv()沒有發現任何數據,或send()調用沒法當即發送數據,那麼將引發socket.error異常。 |
s.makefile() | 建立一個與該套接字相關連的文件 |
參考學習:https://www.cnblogs.com/dalaoban/p/9331113.html
https://www.runoob.com/python/python-socket.html