从2.4更新到Peewee 2.6后,数据库连接设置中断

时间:2015-07-23 17:30:35

标签: python peewee

我想将Pewee从v2.4.7升级到v2.6.3以便使用get_or_create方法。但是,更新后我的连接设置中断了。

我使用以下超类来启用SQLite(2.6.3)的外键约束:

class SqliteFKDatabase(SqliteDatabase):                                                                                                                                              
    def initialize_connection(self):                                                                                                                                                 
        self.execute_sql('PRAGMA foreign_keys=ON;')                                                                                                                                  
        return self 

...使用以下连接设置代码:

db = SqliteFKDatabase(None)  
init_db(path_to_db)   
def init_db(path_to_db):                                                                                                                                                        
    db.init(path_to_db)                                                                                                                                                                      
    db.connect()                                                                                                                                                                     
    db.initialize_connection()  

但是,当我使用新版本的Peewee运行此代码时,我收到以下错误:

 File "./script.py", line 40, in init_db
    db.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/peewee.py", line 3130, in connect
    self.initialize_connection(self.__local.conn)
TypeError: initialize_connection() takes 1 positional argument but 2 were given

我只知道将 self 传递给 initialize_connection(),所以任何人都可以帮我找到第二个参数可能是什么,以及如何解决这个错误?< / p>

修改
更改类声明方法可以修复错误。

    class SqliteFKDatabase(SqliteDatabase):                                                                                                                                              
        def initialize_connection(self, conn):                                                                                                                                           
            self.execute_sql('PRAGMA foreign_keys=ON;')

1 个答案:

答案 0 :(得分:0)

initialize_connection接受一个参数,即新创建的Connection对象。

这应该有效:

class SqliteFKDatabase(SqliteDatabase):                                                                                                                                              
    def initialize_connection(self, conn):                                                                                                                                                 
        cursor = conn.cursor()
        cursor.execute('PRAGMA foreign_keys=ON;')                                                                                                                                  

而您的init_db无需致电initialize_connection - 由Peewee处理:

def init_db(path_to_db):                                                                                                                                                        
    db.init(path_to_db)                                                                                                                                                                      
    db.connect()