PythonPHP MySQL语句解析器解决业务分表

Python011

PythonPHP MySQL语句解析器解决业务分表,第1张

自己曾经做过一个网盘项目。刚开始由于需要快速地从0到1建设上线,所以没有对核心文档表进行分表。当然我的架构理念也是“按需架构设计”。产品需求在没有明确的长远计划的情况下以“小步快跑,赶超竞品”为主。后期由于产品功能触达目标用户群需求点、产品用户体验不断提升、产品多方位导流、加强产品推广文档表每天有百万数据增长量。不得不对文档表进行按用户id分表。当时产品功能已全覆盖文档的生命周期。产品功能已丰富多彩。修改所有关联文档表的业务代码为按用户id分表开发测试成本非常高。上线后线上问题不可控。经过考虑在业务代码最底层DB层进行SQL语句解析来进行用户id分表处理。这样的话开发测试成本都非常低。上线后有问题方便回滚和追查原因。

今天为大家介绍Python/PHP两种MySQL语句解析器。当时网盘项目用的是PHP编程语言开发。

Python的SQL语句解析器 。个人推荐使用moz_sql_parser库。经调研官方的sqlparse库解析出来的语句段无法满足需求也很难理解。

1、Python moz_sql_parser库安装

2、Python moz_sql_parser SQL语句解析

3、Python moz_sql_parser总结

PHP的SQL语句解析器。 个人推荐使用PhpMyAdmin的sql-parser组件。PhpMyAdmin是经过 历史 检验可信赖的。

1、PHP PhpMyAdmin/sql-parser安装

2、PHP PhpMyAdmin/sql-parser SQL语句解析

3、PHP PhpMyAdmin/sql-parser总结

大家有什么问题可以发评论沟通。

这里有个比较清楚的解答:

http://zhidao.baidu.com/question/262503775.html

但是你的是一个文本的话,就要稍微改一下咯

如果改成cx_Oracle的话,就是这样的:

import sys

import cx_Oracle

import os

class handleDataBase:

def __init__(self,user,passwd,server,sql):

self.user=user

self.passwd=passwd

self.server=server

self.sql=sql

self.conn = cx_Oracle.connect("%s/%s@%s"%(self.user,self.passwd,self.server))

def selectDB(self):

cursor = self.conn.cursor()

cursor.execute("select count(1) from search_item_08")

ret = cursor.fetchall()

cursor.close()

print ret

return ret

def closeDB(self):

self.conn.close()

if __name__ == "__main__":

if len(sys.argv) <4:

print "Need Arguments: user passwd server"

sys.exit(1)

user=sys.argv[1]

passwd=sys.argv[2]

server=sys.argv[3]

#sql='select count(1) from search_item_08' #注意这里要改

sql = open('a.sql','r').read() #改成从文件读取

#接下来就访问数据库了

handleDB = handleDataBase(user,passwd,server,sql)

handleDB.selectDB()

handleDB.closeDB()