peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...
我想在peewee(通過
MySQL)創建一個自定義UUID字段.
在python中,我使用UUID作為一個六角形字符串,例如:
uuid =’110e8400-e29b-11d4-a716-446655440000′
但是我想將它存儲在數據庫中的BINARY(16)類型的列中以節省空間.
MySQL內置了HEX()和UNHEX()方法,可以在字符串和二進制文件之間來回轉換.
所以我的問題是如何告訴peewee生成使用內置函數的SQL?這是我想要的代碼的想法:
class UUIDField(Field):
db_field='binary(16)'
def db_value(self, value):
if value is not None:
uuid = value.translate(None, '-') # remove dashes
# HERE: How do I let peewee know I want to generate
# a SQL string of the form "UNHEX(uuid)"?
def python_value(self, value):
if value is not None:
# HERE: How do I let peewee know I want to generate
# a SQL string of the form "HEX(value)"?
請注意,我特別詢問如何讓peewee在自定義SQL中包裝或解包值.我意識到我可能完全在python中進行值轉換,但我正在尋找更通用的基于SQL的解決方案.
編輯:為了將來的參考,這里是我如何使它在python中進行轉換.它雖然沒有回答這個問題,所以任何想法都值得贊賞!
import binascii
from peewee import *
db = MySQLDatabase(
'database',
fields={'binary(16)': 'BINARY(16)'} # map the field type
)
# this does the uuid conversion in python
class UUIDField(Field):
db_field='binary(16)'
def db_value(self, value):
if value is None: return None
value = value.translate(None, '-')
value = binascii.unhexlify(value)
return value
def python_value(self, value):
if value is None: return None
value = '{}-{}-{}-{}-{}'.format(
binascii.hexlify(value[0:4]),
binascii.hexlify(value[4:6]),
binascii.hexlify(value[6:8]),
binascii.hexlify(value[8:10]),
binascii.hexlify(value[10:16])
)
return value
from peewee import SelectQuery
# this does the uuid conversion in python
class UUIDField(Field):
db_field = 'binary(16)'
def db_value(self, value):
if value is None: return None
value = value.translate(None, '-')
query = SelectQuery(self.model_class, fn.UNHEX(value).alias('unhex'))
result = query.first()
value = result.unhex
return value
def python_value(self, value):
if value is None: return None
query = SelectQuery(self.model_class, fn.HEX(value).alias('hex'))
result = query.first()
value = '{}-{}-{}-{}-{}'.format(
result.hex[0:8],
result.hex[8:12],
result.hex[12:16],
result.hex[16:20],
result.hex[20:32]
)
return value
總結
以上是生活随笔為你收集整理的peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web安全开发指南--认证
- 下一篇: linux cmake编译源码,linu