其中关键在于获取到sql文件本身绝对路径
from odoo.modules import get_module_resource
sql_path = get_module_resource('spd_interface', 'data', 'create_spd_erp.sql’)
def get_database_conn(self, database):
source = self.get_srm_source()
conn_str = source.conn_string
if source.password:
conn_str = conn_str % source.password
user = conn_str.split('://')[1].split(':')[0]
port = conn_str.split('://')[1].split(':')[2].split("/")[0]
host = caonn_str.split('://')[1].split(':')[1].split('@')[1]
password = conn_str.split('://')[1].split(':')[1].split('@')[0]
conn = pymysql.connect(host=host, port=int(port), user=user, password=password, database=database,
charset="utf8")
return conn
def create_tables(self, database,user):
conn = False
conn = self.env['spd.erp.interface.base'].get_database_conn(database)
cur = conn.cursor()
try:
sql_path = get_module_resource('spd_interface', 'data', 'create_spd_erp.sql')
sql = """"""
with open(sql_path, 'r+') as f:
sql = f.read().replace('\n', ' ')
sql_list = sql.split(';')
for s in sql_list:
if s:
cur.execute(s + ";")
conn.commit()
except Exception as e:
conn.rollback()
# cur.execute("""delete from mysql.user where User='{user}';""".format(user=user))
# cur.execute("""DROP DATABASE `{database}`;""".format(database=database))
logging.exception(traceback.format_exc())
raise ValidationError('创建中间表发生错误,请联系管理员!')
finally:
if conn:
conn.close()
评论区