Не удалось сделать peewee
работы с простейшим примером:Хранится получать «неправильный тип (ожидаемый basestring, есть строка)» при использовании Peewee для создания таблиц в базе данных SQLite
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
birthday = DateField()
is_relative = BooleanField()
class Meta:
database = db # This model uses the "people.db" database.
class Pet(Model):
owner = ForeignKeyField(Person, related_name='pets')
name = CharField()
animal_type = CharField()
class Meta:
database = db # this model uses the "people.db" database
db.connect()
db.create_tables([Person, Pet])
И я получил эту странную ошибку:
Traceback (most recent call last):
File "D:\EclipseWorkspace\peewee_test.py", line 22, in <module>
db.create_tables([Person, Pet])
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 3448, in create_tables
create_model_tables(models, fail_silently=safe)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 4767, in create_model_tables
m.create_table(**create_table_kwargs)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 4459, in create_table
db.create_table(cls)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 3445, in create_table
return self.execute_sql(*qc.create_table(model_class, safe))
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1865, in inner
return self.parse_node(fn(*args, **kwargs))
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1577, in parse_node
sql, params, unknown = self._parse(node, alias_map, conv)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1551, in _parse
sql, params = self._parse_map[node_type](node, alias_map, conv)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1479, in _parse_clause
node.nodes, alias_map, conv, node.glue)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1594, in parse_node_list
node_sql, node_params = self.parse_node(node, alias_map, conv)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1577, in parse_node
sql, params, unknown = self._parse(node, alias_map, conv)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1551, in _parse
sql, params = self._parse_map[node_type](node, alias_map, conv)
File "D:\Program Files (x86)\Python2.7.3\lib\site-packages\peewee.py", line 1481, in _parse_clause
sql = '(%s)' % strip_parens(sql)
TypeError: Argument 's' has incorrect type (expected basestring, got str)
Я искал какое-то время, и выглядит, как будто это cython
проблема, связанная, некоторые предлагаемые обновления cython
до последней стабильной версии, но я все равно получил эту ошибку с cython
0.23.4, кто-нибудь знает, как исправить эту проблему?
Ну, 'для таблицы в [Person, Pet]: db.create_table (table)' дает ту же ошибку, что и раньше. Не совсем уверен, что сам python вызывает эту проблему, но не хочет обновлять ее прямо сейчас из-за некоторых потенциальных проблем совместимости. – Shane
Если вы не хотите обновлять Python, то в качестве альтернативы вам может потребоваться исправление 'D: \ Program Files (x86) \ Python2.7.3 \ lib \ site-packages \ peewee.py', который я бы не рекомендовал. Кроме того, у меня нет других идей, извините. – JustMe
Решил проблему. Это фактически вызвано 'playhouse/_speedups.pyd', которое было построено относительно более низкой версией (0.19, если быть точным)' cython' во время установки. И 'basestring' был введен в 0.20. – Shane