利用Python怎么实现一个SQLite代理服务器

  介绍

这期内容当中小编将会给大家带来有关利用Python怎么实现一个SQLite代理服务器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>服务程序:

# #   #,服务器程序,接收代理服务器转发来的SQL指令,并返回结果   #   import  sqlite3   import 套接字   import 结构      def  getData (sql):   ,& # 39;& # 39;& # 39;通过给定的SQL 选择语句返回结果& # 39;& # 39;& # 39;   ,with  sqlite3.connect (" # 39; database.db& # 39;), as 康涅狄格州:   时间=cur 才能;conn.cursor ()   cur.execute才能(sql)   时间=result 才能;cur.fetchall ()   return 结果      def  doSql (sql):   ,& # 39;& # 39;& # 39;适用于删除/更新/INSERT 到语句,返回影响的记录条数& # 39;& # 39;& # 39;   ,with  sqlite3.connect (" # 39; database.db& # 39;), as 康涅狄格州:   时间=cur 才能;conn.cursor ()   时间=result 才能;cur.execute (sql)   return  result.rowcount      #,创建插座对象,默认使用IPV4 + TCP   时间=sockServer  socket.socket ()   sockServer.bind ((& # 39; & # 39;,, 3030))   sockServer.listen (1)   while 真正的:   ,#接收客户端连接   ,试一试:   ,,康涅狄格州,addr =, sockServer.accept ()   ,除了:   ,继续   ,=,,sql  conn.recv (1024) .decode (& # 39; gbk # 39;) .lower ()   ,   ,if  sql.startswith((& # 39;更新# 39;,& # 39;删除# 39;,& # 39;插入# 39;)):   尝试才能:   ,,#,首先发送要发送的字节总数量   ,,#,然后再发送真实数据   ,,result =, str (doSql (sql) .encode (& # 39; gbk # 39;)   ,,conn.send (struct.pack(& # 39;我# 39;,,len(结果)))   ,,conn.send(结果)   除了才能:   ,,message =, b # 39;错误# 39;   ,,conn.send (struct.pack(& # 39;我# 39;,,len(消息)))   ,,conn.send(消息)   ,elif  sql.startswith(& # 39;选择# 39;):   尝试才能:   ,,result =, str (getData (sql)) .encode (& # 39; gbk # 39;)   ,,conn.send (struct.pack(& # 39;我# 39;,,len(结果)))   ,,conn.send(结果)   除了才能:   ,,message =, b # 39;错误# 39;   ,,conn.send (struct.pack(& # 39;我# 39;,,len(消息)))   ,,conn.send(消息)

<强>代理程序:

# #   #,代理服务器,在SQLite数据库服务器和客户端之间进行指令和数据的转发   #,这样可以把数据库和程序放到两个服务器上进行分离   # #   import 套接字   得到threading  import 线程   import 结构      时间=sockServer  socket.socket ()   sockServer.bind ((& # 39; & # 39; 5050))   sockServer.listen (50)      def 代理(康涅狄格州):   ,#接收客户端发来的指令,并进行过滤=,,sql  conn.recv (1024)   ,if  not  sql.decode (& # 39; gbk # 39;) .startswith((& # 39;选择# 39;,,& # 39;删除# 39;,,& # 39;插入# 39;,& # 39;更新# 39;)):   时间=message 才能;b # 39; not  a  sql 声明# 39;   conn.send才能(struct.pack(& # 39;我# 39;,,len(消息)))   conn.send才能(消息)   ,返回   ,其他的:   时间=sockClient 才能;socket.socket ()   #,才能尝试连接服务器   尝试才能:   ,,sockClient.connect ((& # 39; 10.2.1.3& # 39;,, 3030))   除了才能:   ,,message =, b # 39; Server  not 活着# 39;   ,,conn.send (struct.pack(& # 39;我# 39;,,len(消息)))   ,,conn.send(消息)   ,才能回来   ,,   #,才能向服务程序转发SQL语句   sockClient.send才能(sql)   #,才能数据量大小,使用sturct序列化一个整数需要4个字节   时间=size 才能;sockClient.recv (4)   conn.send才能(大小)   size 才能=,struct.unpack(& # 39;我# 39;,,大小)[0]   while 才能正确的:   ,,if  size ==, 0:   ,才能打破   ,,elif  size 祝辞,4096:   ,,,data =, sockClient.recv (4096)   ,,,conn.send(数据)   ,,,size  -=, len(数据)   ,,:   ,,,data =, sockClient.recv(大小)   ,,,conn.send(数据)   ,,,size  -=, len(数据)   sockClient.close才能()   ,conn.close ()      while 真正的:   ,康涅狄格州,_ =, sockServer.accept ()   ,线程(目标=代理,arg游戏=(康涅狄格州)).start ()

<强>模拟客户端程序:

# #   #,模拟客户端,向SQLite代理服务器发送指令并接收数据   #   import  sqlite3   import 套接字   import 结构      while 真正的:=,sql 输入(& # 39;输入一个要执行的SQL语句:\ n # 39;)   ,#没有输入,进入下一次循环   ,if  sql.strip (),==, & # 39; & # 39;:   ,继续   ,   ,#输入离职或辞职,退出客户端   ,if  sql 拷贝(& # 39;退出# 39;,,& # 39;退出# 39;):   ,打破   ,#建立插座,尝试连接=,,sockClient  socket.socket ()   ,试一试:   sockClient.connect才能((& # 39;10.2.1.3& # 39;,,5050)),,   ,除了:   打印才能(& # 39;服务器异常,请检查& # 39;)   ,其他的:   #,才能发送远程SQL语句   sockClient.send才能(sql.encode (& # 39; gbk # 39;))   时间=size 才能;sockClient.recv (4)   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

利用Python怎么实现一个SQLite代理服务器