TiDB dialect for peewee.
pip install peewee-tidb
pip install git+https://github.com/wd0517/peewee-tidb.git@main
from peewee import *
from peewee_tidb import TidbDatabase
db = TiDBDatabase(
'peewee',
host='127.0.0.1',
port=4000,
user='root',
password=''
)
AUTO_RANDOM
is a feature in TiDB that generates unique IDs for a table automatically. It is similar to AUTO_INCREMENT
, but it can avoid write hotspot in a single storage node caused by TiDB assigning consecutive IDs. It also have some restrictions, please refer to the documentation.
from peewee_tidb import BigAutoRandomField
class MyModel(BaseModel):
id = BigAutoRandomField(shard_bits=6, range=54, primary_key=True)
Note
AUTO_RANDOM
is supported after TiDB v3.1.0, and only support define withrange
after v6.5.0, sorange
will be ignored if TiDB version is lower than v6.5.0.
AUTO_ID_CACHE
allow users to set the cache size for allocating the auto-increment ID, as you may know, TiDB guarantees that AUTO_INCREMENT values are monotonic (always increasing) on a per-server basis, but its value may appear to jump dramatically if an INSERT operation is performed against another TiDB Server, This is caused by the fact that each server has its own cache which is controlled by AUTO_ID_CACHE
. But from TiDB v6.4.0, it introduces a centralized auto-increment ID allocating service, you can enable MySQL compatibility mode by set AUTO_ID_CACHE
to 1
when creating a table without losing performance.
To use AUTO_ID_CACHE
in peewee, you can set table_settings
in Meta
class.
class MyModel(BaseModel):
name = CharField(max_length=32, unique=True)
class Meta:
table_settings = "auto_id_cache=1;"