关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~
"""
目的:postgresql不支持夸库去操作赋权
及不支持grant select on all tables in schema xxxx.public to 'user';
"""
import psycopg2,sys
__author__ = '南山南'
"""
接受py文件参数
parameter:前端java程序传入的组合字符串
delimite_flag:字符串分隔符
类型:
user1,db1,read,Y|user2,db2,read,Y|user3,db3,read,Y|user4,db3,write,Y
""" parameter = sys.argv[1] delimite_flag = sys.argv[2] # dbname = sys.argv[3] ##print(parameter.split('|')) # list_dbname = [] # for name in parameter.split('|'): # #print(name.split(',')[1]) # list_dbname.append(name.split(',')[1]) # list_dbname=list(set(list_dbname)) # #print(list_dbname) """ 解析传入的parameter参数,获取数据名称并且去除 """ list_db = {name.lower().split(',')[1] for name in parameter.split('|')} list_db=list(list_db) print(list_db) """ 遍历数据库名称,建立数据库连接,数据库名称传入SP,在独立的数据库下进行赋权操作 """ for db_name in list_db: print("Begin connect to %s database and grant or revoke object access!" %(db_name)) str = "dbname='%(dbname)s' \ user='%(user)s' \ password='%(password)s' \ port='%(port)s' \ host='%(host)s'" \ % {'dbname': db_name, \ 'user': 'xxx', \ 'password': 'xxxx', \ 'port': '5432', \ 'host': 'xxxx'} # print(str) conn = psycopg2.connect(str) cur = conn.cursor() cur.execute("select * from sp_test('%s','%s','%s');" % (sys.argv[1],sys.argv[2],db_name)) #cur.execute("select * from tmp_table;") rows = cur.fetchall() print(rows) for i in rows: print(i) conn.commit() cur.close() conn.close()
print("End connect to %s database and grant or revoke object access!" %(db_name))
主要的赋权路径是写在sp_test这个存储过程里面的,这里接不贴了,大家可以看看怎么去
连接数据库,接受前端参数,并且对前端参数做一定处理,传入到Python中