使用peewee如何连接到现有的SQLite数据库以供阅读

时间:2018-05-07 09:42:18

标签: python peewee

我有一个愚蠢的问题。

这是我的代码:

  from peewee import *

   db = SqliteDatabase(None)

   class Base(Model):
       class Meta:
           database = db

   class Table(Base):
       a_date = DateField()
       url = CharField()

   def __main()__
       parser = argparse.ArgumentParser()
       parser.add_argument('--db-dir', action='store')
       args = parser.parse_args()
       db_path = os.path.join(args.db_dir, 'data.db')
       try:
           db.init(db_path)
           db.connect()
           query = Table.select().order_by(Table.a_date.desc()).get()   
       except Exception:
           sys.exit(1)
       else:
           print(query.url)

       sys.exit(0)


   if __name__ == '__main__':
       main()

此代码工作正常,但如果文件db不存在,db.connect始终创建它。我怎么能阻止这个?

另一个问题是,如何在不声明peewee模型的情况下查询该数据库的数据库?

由于

1 个答案:

答案 0 :(得分:0)

如果我理解正确的peewee doc(http://docs.peewee-orm.com/en/latest/peewee/database.html),他们会使用python提供的api来连接到sqlite。

这意味着您必须处理此api(https://docs.python.org/2/library/sqlite3.html#sqlite3.connect),并且connect方法总是事先创建数据库。

但是我相信您可以将自定义Connection类传递给此方法(参数工厂),您可以在此自定义类中定义您的行为。

import os

from sqlite3 import Connection
from peewee import *

class CustomConnection(Connection):
    def __init__(self, dbname, *args, **kwargs):
        # Check if db already exists or not
        if not os.path.exists(dbname):
            raise ValueError('DB {} does not exist'.format(dbname))
        super(CustomConnection, self).__init__(dbname, *args, **kwargs)

db = SqliteDatabase('mydatabase', factory=CustomConnection)