2017-02-06 16 views
-1

В PeeWee ORM вы можете использовать id = IntegerField(primary_key=True) для первичного ключа или id = PrimaryKeyField().Как вы добавляете флаг AUTO_INCREMENT в столбце MYSQL с Peewee?

Если вы посмотрите на таблицу, которая определена путем выполнения Model.create_table(fail_silently=True), поле первичного ключа не будет помечено AUTO_INCREMENT.

Это проблема, если у вас есть другое приложение, которое не использует peewee и вставляет записи в эту таблицу.

Можете ли вы пометить поле AUTO_INCREMENT в MySql или это приведет к ошибкам?

ответ

0

Прежде всего, нет необходимости создавать Первичный ключ для таблицы. Peewee автоматически создаст первичный ключ для каждой таблицы с идентификатором имени.

Но если вы хотите создать его (и я обычно делаю) вы создаете его как:

id = PrimaryKeyField(primary_key=True) 

В любом случае первичный ключ идентификатор помечен как auto_increment. Вы можете увидеть его с помощью MySQL Workbench или DBeaver или любым другим способом, который вам нравится.

Кроме того, я обычно создаю таблицы с:

mydb = MySQLDatabase(**config) 
mydb.connect() 
mydb.create_tables([Model1_name, Model2_name, Model3_name], safe=True) 

Конечно,

Model.create_table(fail_silently=True) 

также работает для одной таблицы без проблем (я проверил)

+0

Возможно, мне не хватает параметра primary_key = True, и поэтому он не указывает его как AUTO_INCREMENT. Я попробую это спасибо. –

+0

Я предположил, что это таблицы InnoDB. Или это MyISAM? – gms

+0

Вам не нужен primary_key = True. – coleifer

1

Разница между IntegerField(primary_key=True) и PrimaryKeyField() - это то, что первое не указывает никакой информации об автоинкрементах, а последнее делает. Они не то же самое.

Использовать IntegerField(primary_key=True), когда идентификаторы поступают из какого-то источника за пределы базы данных.

Используйте PrimaryKeyField(), если вам нужен только уникальный идентификатор.