我想将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;')
答案 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()