【Python】Django Model 怎么使用 UUID 作为主键?

>>> import uuid

print uuid.uuid3(uuid.uuid1(), ‘python.org‘)

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID(‘a8098c1a-f86e-11da-bd1a-00112444be1e‘)

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, ‘python.org‘)
UUID(‘6fa459ea-ee8a-3ca4-894e-db77e160355e‘)

>>> # make a random UUID
>>> uuid.uuid4()
UUID(‘16fd2706-8baf-433b-82eb-8c7fada847da‘)

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, ‘python.org‘)
UUID(‘886313e1-3b8a-5372-9b90-0c9aee199e5d‘)

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID(‘{00010203-0405-0607-0809-0a0b0c0d0e0f}‘)

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
‘00010203-0405-0607-0809-0a0b0c0d0e0f‘

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
‘\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f‘

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID(‘00010203-0405-0607-0809-0a0b0c0d0e0f‘)

参考资料:

https://docs.python.org/2/library/uuid.html

http://www.cnblogs.com/dkblog/archive/2011/10/10/2205200.html

http://www.zhihu.com/question/19742113

http://stackoverflow.com/questions/8773438/django-how-do-i-use-uuidfield-from-django-extensions

http://www.cnblogs.com/lexus/archive/2012/05/04/2483272.html

http://stackoverflow.com/questions/33375347/django-uuidfield-issue

https://segmentfault.com/a/1190000007098492

http://blog.csdn.net/iloveyin/article/details/44852645

时间: 2024-10-23 08:55:40

【Python】Django Model 怎么使用 UUID 作为主键?的相关文章

MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

这里使用触发程序实现此功能. 触发程序语法如下: Create trigger <tri_name> {before|after} {insert|update|delete} On <tab_name> For each row <触发程序SQL语句> 核心代码: 1 use t14test 2 show tables 3 drop table if exists uuidTest 4 create table uuidTest( 5 testId VARCHAR(3

为什么分布式数据库中不使用uuid作为主键?

分布式数据库当然也有主键的需求,但是为什么不直接使用uuid作为主键呢?作为曾经被这个问题困惑过的人,试着回答一下 1. UUID生成速率低下 Java的UUID依赖于SecureRandom.nextBytes方法,而SecureRandom又依赖于操作系统提供的随机数源, 在Linux系统下,它的默认依赖是/dev/random,而这个源是阻塞的. 最可怕的是,这个nextBytes方法还是一个synchronized方法,也就是说,如果多线程调用UUID,生成速率不升反降. 测试结果:在一

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试.   作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试.            测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方

python django model类型总结

V=models.CharField(max_length=None[, **options]) #varchar V=models.EmailField([max_length=75, **options]) #varchar V=models.URLField([verify_exists=True, max_length=200, **options]) #varchar V=models.FileField(upload_to=None[, max_length=100, **optio

python django model类型摘要

V=models.CharField(max_length=None[, **options]) #varchar V=models.EmailField([max_length=75, **options]) #varchar V=models.URLField([verify_exists=True, max_length=200, **options]) #varchar V=models.FileField(upload_to=None[, max_length=100, **optio

UUIDField在Django Model中的使用经验

今天下午在将数据库从旧库导入到新库时,完成后发现Django网站无法打开,报"ValueError, badly formed hexadecimal UUID string",最终定位到原因是一个UUIDField类型字段的值为0,造成Django无法将0验证为UUID类型,从而引发ValueError异常.现总结UUIDField在Django Model中的使用经验如下. 在Django中UUIDField类型的字段可以作为主键(主键是绝对不可能为NULL值的)使用,这个是丝毫没

初识python django, 让我们一起进入python的世界吧

这几天花时间学习了一下python django,正如某人所说,掌握另外一门语言是有必要的,同样我也作出了自己的选择.从这几天的学习中,我确实也发现其他语言及其框架等确实有一种与众不同的感觉.下面我把自己这几天看到的东西稍微作了一下总结,本文并不是django的教程,而是在麦子学院参加学习之后对django的一些自己的理解,可能有些不成熟的地方,希望大家不要吝惜手中的砖头. 一 django的orm 如果有人问我喜欢django的什么,我会耗不犹豫的告诉你是django的orm,这个想法的产生完

Django—Model操作

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 Sqlite3.MySQL.PostgreSQL 等数据库,只需要在 settings.py 中配置即可,不用更改 models.py 中的代码,丰富的 API 极大的方便了使用. 一.创建表 1. 基本结构 1 from django.db import models 2 3 class UserInfo(models.Model): 4 #若不指定主键,则会自动创建int类型的id列为

[python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py ? 1.2 安装python虚拟环境virtualenv virtualenvwrapper 首先说明下为什么要装这两个包: First, it's important to understand that a virtual environment is a special tool used to ke