一、Python MySQL交互
commit() 提交
rollback() 回滚
cursor 用来执行命令的方法:
callproc(self, procname, args) 用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args) 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args) 执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self) 移动到下一个结果集
cursor 用来接收返回值的方法
fetchall(self) 接收全部的返回结果行.
fetchmany(self, size=None) 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self) 返回一条结果行.
scroll(self, value, mode='relative') 移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
CREATE TABLE `testtbl` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`sex` int(4) NOT NULL DEFAULT '0',
`degree` double(16,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=latin1
#!/usr/bin/python
#_*_coding:utf-8_*_
import MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='redhat',db='py_s10',port=3306)
cur=conn.cursor()
data_list = []
for i in range(10):
data_list.append(('leo_%s' % i,i,i))
#insert_data = "insert into testtbl values(0,%s,%s,%s)"
#cur.execute(insert_data,('imdst',1,6.88)) #执行单条SQL语句
#cur.executemany(insert_data,data_list) #执行单条SQL语句,但是重复执行参数列表里的参数
cur.execute('select * from testtbl')
#print cur.fetchall() #接受全部的返回行
#print cur.fetchone() #返回一条结果行
#query_res = cur.fetchmany(20) #按Size条返回结果行
#query_res = cur.fetchall() #返加全部行
cur.scroll(3,mode='relative') #从当前所在行移动5条
print cur.fetchone()
cur.scroll(2,mode='relative') #从当前所在行移动5条
print cur.fetchone()
cur.scroll(3,mode='absolute') #从结果集的第一行移动5条
print cur.fetchone()
#conn.rollback() #回滚
#conn.commit() #提交
cur.close()
conn.close()
except MySQLdb.Error,e:
print "MySQL Err:",e
二、Socket 编程
- socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
- 简单的说就是建立连接发送和接收。 (C/S)
- Socket通信步骤
- 打开一个Socket
- 绑定/连接到一个地址和端口
- 侦听进来的连接
- 接受连接
- 读写数据
- socket 类型
socket.AF_UNIX
只能够用于单一的Unix系统进程间通信
socket.AF_INET
服务器这间的网络通信
Socket.AF_INET6
IPV6
socket.SOCK_STREAM
流式Socket,for TCP
socket.SOCK_DGRAM
数据报式socket,for UDP
- socket 函数
socket(famliy,type,[protocal])
使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字
s.bind(address)
将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址
s.listen(backlog)
开始监听传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了
s.connect(address)
连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接同一台机器上的服务器,可以将hostname设为‘localhost’。 如果连接出错,返回socket.error错误。
s.accept()
接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
s.close()
关闭套接字。
- 简单的sock服务端和客户端
#!/usr/bin/python
#_*_coding:utf-8_*_
# sock_server.py
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
#!/usr/bin/python
#_*_coding:utf-8_*_
# sock_client.py
import socket
HOST = '127.0.0.1' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
s.sendall('Hello,World')
data = s.recv(1024)
s.close()
print 'Received',data
#!/usr/bin/python
#thread_sock_server.py
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST,PORT = "localhost",9000
server = SocketServer.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()