侧边栏壁纸
博主头像
EinTao博主等级

昨天再好,也走不回去;明天再难,也要抬脚继续。

  • 累计撰写 32 篇文章
  • 累计创建 3 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

odoo中直接执行sql文件

EinTao
2022-11-27 / 0 评论 / 0 点赞 / 23 阅读 / 305 字

其中关键在于获取到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()
0

评论区