导读:本篇文章首席CTO笔记来给大家介绍有关django如何获取表最大的id的相关内容,希望对大家有所帮助,一起来看看吧。
django怎样获得框架自动定义的自增id字段
django自定义字段类型,实现非主键字段的自增
# -*- encoding: utf-8 -*-from django.db.models.fields import Field, IntegerFieldfrom django.core import checks, exceptionsfrom django.utils.translation import ugettext_lazy as _class AutoIncreField(Field):
description = _(\"Integer\")
empty_strings_allowed = False
default_error_messages = { \'invalid\': _(\"\'%(value)s\' value must be an integer.\"),
} def __init__(self, *args, **kwargs):
kwargs[\'blank\'] = True
super(AutoIncreField, self).__init__(*args, **kwargs) def check(self, **kwargs):
errors = super(AutoIncreField, self).check(**kwargs) # 每张表只能设置一个字段为自增长字段,这个字段可以是主键,也可以不是主键,如果不是主键,则必须设置为一种“键(key)”
# (primary key)也是键(key)的一种,key还包括外键(foreign key)、唯一键(unique key)
errors.extend(self._check_key()) return errors def _check_key(self):
if not self.unique: return [
checks.Error( \'AutoIncreFields must set key(unique=True).\',
obj=self,
id=\'fields.E100\',
),
] else: return [] def deconstruct(self):
name, path, args, kwargs = super(AutoIncreField, self).deconstruct() del kwargs[\'blank\']
kwargs[\'unique\'] = True
return name, path, args, kwargs def get_internal_type(self):
return \"AutoIncreField\"
def to_python(self, value):
if value is None: return value try: return int(value) except (TypeError, ValueError): raise exceptions.ValidationError(
self.error_messages[\'invalid\'],
code=\'invalid\',
params={\'value\': value},
) def db_type(self, connection):
return \'bigint AUTO_INCREMENT\'
def rel_db_type(self, connection):
return IntegerField().db_type(connection=connection) def validate(self, value, model_instance):
pass
def get_db_prep_value(self, value, connection, prepared=False):
if not prepared:
value = self.get_prep_value(value)
value = connection.ops.validate_autopk_value(value) return value def get_prep_value(self, value):
value = super(AutoIncreField, self).get_prep_value(value) if value is None: return None
return int(value) def contribute_to_class(self, cls, name, **kwargs):
assert not cls._meta.auto_field, \"A model can\'t have more than one AutoIncreField.\"
super(AutoIncreField, self).contribute_to_class(cls, name, **kwargs)
cls._meta.auto_field = self def formfield(self, **kwargs):
return None
Django使用save新增一条数据之后如何获取自增id
back = models.Back.objects.get(bookname=bookname) # 查询你保存的那本书的记录
print(back.id) # 打印出你要的新增记录的id值
如何限制Django模型中数值字段的最大值
有两种方法可以做到这一点。 一个是使用表单验证从不允许用户输入超过 50的数字。 表单验证文档 。
如果进程中没有用户,或者你没有使用表单输入数据,那么你必须重写模型方法的save,或者将数据限制在字段中。
python django查询mysql表字段的最大值
如果你的表是用模型建立的话,类似这样
class Person(models.Model):
qq=models.CharField(max_length=100)
要取Person模型中的id最大值的话,可以使用a=Person.objects.latest(\'id\'),这样取到的是对应最大id的一个模型,a.id就是你要的值,然后a.qq就是最大id的qq号码
Django 插入数据后,获取该数据id的方法
\'\'\'
class Car(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
top_speed = models.IntegerField()
\'\'\'
\'\'\'
car = Car(name=car_name, top_speed=top_speed)
try:
car.save()
response = json.dumps([{ \'Success\': \'Car added successfully!\', \'id\': car.id}])
\'\'\'
django如何解决单表数据大的问题
通过mysql中间件来解决。
一般套路是在中间件中配置分表规则,一般也是分表维度和分表数量。
这样,程序要改动的地方只需要把数据库连接地址修改为中间件的地址就可以了,剩下的逻辑全部靠中间件来完成即可。
这种办法非常偷懒,但是可以解放RD的压力。
结语:以上就是首席CTO笔记为大家介绍的关于django如何获取表最大的id的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!
版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。