weixin_39285871 2021-06-09 22:07 采纳率: 100%
浏览 127
已结题

pyinstaller打包之后无法写入数据到db,报错no such table: helpers

用pycharm运行没问题,但是打包之后会报错。表已经创建了没问题,exe根目录也会生成.db文件

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

先用pycharm运行后,再把生成的.db文件拷贝到exe根目录就好了,但是为什么直接运行exe在根目录生成的.db文件不能用呢,还有怎么才能把依赖文件直接打包呢

def create_database():
    base_dir = os.path.dirname(os.path.abspath(__file__))
    db_path = base_dir + '\data_ticketcounter.db'
    conn = sqlite3.connect(db_path)
    print("Database connected successfully")
    c = conn.cursor()
    try:
        c.execute('''CREATE TABLE helpers (
        'appid' INT(11) NOT NULL,
        'name' VARCHAR(255) NOT NULL,
        'count' INT(11) NOT NULL,
        'city' VARCHAR(255) NULL DEFAULT NULL,
        'touch_delay' INT(11) NULL DEFAULT NULL,
        'avg_csi' INT(11) NULL DEFAULT NULL,
        'is_outsourcing' INT(11) NULL DEFAULT NULL,
        'resolved_count' INT(11) NULL DEFAULT NULL,
        'touched_count' INT(11) NULL DEFAULT NULL,
        'tcs_project_name' VARCHAR(500) NULL DEFAULT NULL,
        'department' VARCHAR(255) NULL DEFAULT NULL,
        'resolve_delay' INT(11) NULL DEFAULT NULL,
        'csi_count' INT(11) NULL DEFAULT NULL,
        'email' VARCHAR(255) NULL DEFAULT NULL,
        'timenow' DATE NULL DEFAULT NULL,
        PRIMARY KEY ('appid', 'name'));''')
        conn.commit()
        print("Create table1 successfully")
    except sqlite3.OperationalError:
        print("table already exists")
def save_app_infos(data):  # 构建数据库,存储数据,目标是可自动更新
    conn = sqlite3.connect('data_ticketcounter.db')
    print("Database connected successfully")
    c = conn.cursor()
    table = 'helpers'
    data['timenow'] = datetime.date.today()
    keys = ','.join(data.keys())
    values = ','.join(['?'] * len(data))
    sql_insert = 'INSERT INTO {table}({keys}) VALUES ({values}) ON CONFLICT(appid, name) DO UPDATE SET '.format(table=table, keys=keys,
                                                                                                 values=values)
    update = ','.join(['{key}=?'.format(key=key) for key in data])
    sql_insert += update
    try:
        if c.execute(sql_insert, tuple(data.values()) * 2):
            print("执行成功")
            conn.commit()
    except Exception as e:
        print(e)
        conn.rollback()
    conn.close()

  • 写回答

1条回答 默认 最新

  • weixin_39285871 2021-06-09 23:57
    关注

    解决了,用sql查询的时候连接数据库用的不是绝对路径

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月28日
  • 已采纳回答 8月20日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度