使用Peewee,如何检查一个SQLite文件是否已创建vs未创建表填充.如果导入,似乎表已创建? &



首先我想检查文件是否存在,我使用了这个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'

我有一个单独的文件用于我的模型,并创建数据库。我担心的是,如果我为数据库导入类,它会实例化sql文件。此外,pywebview在显示我的html时,会清除所有变量。如果我在加载页面时运行此进程,那么我就无法访问sqlite是否存在的变量。

db = SqliteDatabase('games.db')
class Game(Model):
game = CharField()
exe = CharField()
path = CharField()
longpath = CharField()
i_d = IntegerField()

class Meta:
database = db

这将创建表,因此检查文件是否存在是无用的。然后,如果我取消注释该文件中数据库创建的第一行,否则我的所有数据库。变量是不可用的。我一定是错过了一个非常明显的功能来解决我的问题。

# 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()

我建议使用sqlite的user_versionpragma:

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.

我不确定这是否回答了你的问题,因为它似乎涉及多个进程和/或处理器,但是为了检查数据库文件的存在,我使用了以下内容:

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

from reddit:我:对于最初的挑战,我想知道文件是否存在是有原因的。也许它的前提是有缺陷的,我会解释的,你可以在那里填写。

这个脚本可以在我没有权限的多台机器上运行。在第一次用例的入口点,我将从远程位置移植数据,如果这是脚本第一次在该机器上运行,它将沿着不同的工作流程运行,而不是重复打开。

类似于抓取所有计算机程序,而不是从上一个会话中追加和读取。你建议如何快速理解这个过程是否已经开始,并从上一个会话结束。

检查sqlite文件是否被制作是最直观的感觉,然后调整到字节大小。lmk

:这是一个好问题!

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

如果你的程序在新系统上做的第一件事是下载某种固定数据,那么我的方法是像正常一样加载DB文件,让Peewee确保表存在,然后对其中一个表执行无子句SELECT(要么通过模型,要么直接在数据库上通过连接,如果你想的话)。如果它是空的(没有得到结果),那么您就知道您在一个新的系统上,您需要进行远程调用。如果你得到了结果(你不需要知道它们是什么),那么你就知道你不是在一个新的系统上。

最新更新