下面的例子,在我的机器上,设置range(150)
导致错误,同时range(100)
才不是:
from peewee import *
database = SqliteDatabase(None)
class Base(Model):
class Meta:
database = database
colnames = ["A", "B", "C", "D", "E", "F", "G", "H"]
cols = {x: TextField() for x in colnames}
table = type('mytable', (Base,), cols)
database.init('test.db')
database.create_tables([table])
data = []
for x in range(150):
data.append({x: 1 for x in colnames})
with database.atomic() as txn:
table.insert_many(data).upsert().execute()
导致:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 3213, in execute
cursor = self._execute()
File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 2628, in _execute
return self.database.execute_sql(sql, params, self.require_commit)
File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 3461, in execute_sql
self.commit()
File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 3285, in __exit__
reraise(new_type, new_type(*exc_args), traceback)
File "/cluster/home/ifiddes/python2.7/lib/python2.7/site-packages/peewee.py", line 3454, in execute_sql
cursor.execute(sql, params or ())
peewee.OperationalError: too many SQL variables
这对我来说似乎很低。我正在尝试使用peewee
取代现有的pandas
基于 SQL 构造,因为pandas
缺乏对主键的支持。每个循环只能插入约 100 条记录的能力非常低,而且如果有一天列数增加的话,就会很脆弱。
我怎样才能让这项工作做得更好?是否可以?