首先我想检查文件是否存在,我使用了这个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_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.
我不确定这是否回答了你的问题,因为它似乎涉及多个进程和/或处理器,但是为了检查数据库文件的存在,我使用了以下内容:
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(要么通过模型,要么直接在数据库上通过连接,如果你想的话)。如果它是空的(没有得到结果),那么您就知道您在一个新的系统上,您需要进行远程调用。如果你得到了结果(你不需要知道它们是什么),那么你就知道你不是在一个新的系统上。