簡體   English   中英

使用 Peewee,如何在不創建表的情況下檢查是否已創建 SQLite 文件與填充文件。 如果我導入,表似乎已創建?

[英]With Peewee, how to check if an SQLite file has been created vs filled without creating a table. If I import, it seems the table is created?

首先我想檢查文件是否存在,我使用了這個 os.path:

      def check_db_exist():
        try:
            file_exists = exists('games.db')
            if file_exists:
                file_size = os.path.getsize('games.db')
                if file_size > 3000:
                    return True, file_size
                else:
                    return False, 'too small'
            else:
                return False, 'does not exist'
        except:
            return False, 'error'

我的模型有一個單獨的文件,並創建了數據庫。 我擔心的是,如果我為數據庫導入 class,它會實例化 sql 文件。 此外,pywebview 在顯示我的 html 時擦除所有變量。 如果我在加載頁面時運行此過程,那么我將無法訪問 true/false sqlite 存在的變量。

        db = SqliteDatabase('games.db')

        class Game(Model):
            game = CharField()
            exe = CharField()
            path = CharField()
            longpath = CharField()
            i_d = IntegerField()
            
            class Meta:
                database = db

這將創建表,因此檢查文件是否存在是無用的。 然后,如果我取消注釋數據庫 gest 創建的文件中的第一行,否則我的所有 db. 變量不可用。 我一定是缺少一個非常明顯的 function 來解決我的問題。

    # db = SqliteDatabase('games.db')

    def add_game(game, exe, path, longpath, i_d):
        try:
            Game.create(game=game, exe=exe, path=path, longpath=longpath, i_d=i_d) 
        except:
            pass

    def loop_insert(lib):
        db.connect()

        for i in lib[0]:
            add_game(i.name, i.exe, i.path, i.longpath, i.id)
        db.close()



    def initial_retrieve():
        db.connect()
        vals = ''
        for games in Game.select(): 
            val = js.Import.javascript(str(games.game), str(games.exe), str(games.path), games.i_d)
            vals = vals + val

        storage = vals
        db.close() 
        return storage

我應該只在文件中的不同位置導入文件嗎? 什么時候我覺得舒服? 我沒有經常看到,所以我不想在格式上不正確。

編輯:編輯:也許更像這樣?

      def db():
      db = SqliteDatabase('games.db')
      return db 
   class Game(Model):
        game = CharField()
        exe = CharField()
        path = CharField()

文件 2:

        from sqlmodel import db, Game

    def add_game(game, exe, path, longpath, i_d):
        try:
            Game.create(game=game, exe=exe, path=path, longpath=longpath, i_d=i_d) 
        except:
            pass

    def loop_insert(lib):
        db.connect()

        for i in lib[0]:
            add_game(i.name, i.exe, i.path, i.longpath, i.id)
        db.close()

我不確定這是否回答了您的問題,因為它似乎涉及多個進程和/或處理器,但為了檢查數據庫文件是否存在,我使用了以下內容:

DATABASE = 'dbfile.db'
if os.path.isfile(DATABASE) is False:
  # Create the database file here
  pass
else:
  # connect to database here
  db.connect()

我建議使用 sqlite 的user_version pragma:

db = SqliteDatabase('/path/to/db.db')
version = db.pragma('user_version')
if not version:  # Assume does not exist/newly-created.
    # do whatever.
    db.pragma('user_version', 1)  # Set user version.

來自 reddit:我:對於最初的挑戰,我想知道文件是否存在是有原因的。 也許它的處所有缺陷,我會解釋,你可以在那里填寫。

該腳本將在我無法訪問的多台機器上運行。 在首次用例的入口點,我將從遠程位置移植數據,如果腳本是第一次在該機器上運行,那么它會進入與重復打開不同的工作流程。

類似於抓取所有 pc 程序與從最后一個 session 追加和讀取。您建議如何快速了解該過程是否從以前的 session 開始和完成。

檢查 sqlite 文件是否最直觀,然后調整為字節大小。 點點滴滴

他們:這是個好問題!

  How would you suggest quickly understanding if that process 
  has started and finished from a previous session.

如果您的程序在新系統上做的第一件事是下載某種夾具數據,那么我的方法是正常加載 DB 文件,讓 Peewee 確保表存在,然后執行 no-clause SELECT在其中之一上(通過 model,或者如果需要,直接通過連接在數據庫上。)如果它是空的(沒有結果),那么您知道您在一個新系統上,您需要進行遠程調用. 如果你得到結果(你不需要知道它們是什么)那么你就知道你不是在一個新的系統上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM