处理数据类型
二进制类型
Vastbase G100提供两种不同的方法存储二进制数据。
二进制数据可以使用二进制数据类型BYTEA存储在表中,或者使用大对象特性以一种特殊的格式将二进制数据存储在一个独立的表中, 然后通过在表中保存一个类型为 OID 的值来引用该表。
以下为BYTEA类型使用示例。
(1)创建表:
class ByteaTest(models.Model):
id = models.AutoField(primary_key=True)
col1 = models.BinaryField()
class Meta():
db_table = 'byteatest'
(2)插入数据:
data = bytes(range(256))
u = ByteaTest(col1=data)
u.save()
(3)读取数据:
b1 = ByteaTest.objects.get(id=1)
print(b1.id,b1.col1.tobytes())
assert b1.col1.tobytes() == data
字符类型
Vastbase G100中TEXT类型与VARCHAR类型都是可变长的字符类型,区别在于VARCHAR类型通过VARCHAR(n)中的n来限制最大长度,而TEXT类型没有。TEXT类型与VARCHAR类型几乎没有性能差别,TEXT类型最多可存储1G数据。
(1)创建表:
class StringTest(models.Model):
id = models.AutoField(primary_key=True)
col1 = models.CharField(max_length=256)# varchar类型
col2 = models.TextField()# text类型
class Meta():
db_table = 'stringtest'
(2)插入数据:
a='test1'
b='test2'
u = StringTest(col1=a,col2=b)
u.save()
(3)读取数据:
s1 = StringTest.objects.get(id=1)
print(s1.id,s1.col1,s1.col2)
assert s1.col1==a
assert s1.col2==b
数字类型
数字类型有整数类型、任意精度数字类型、浮点类型和序数类型。下面用整数类型integer、任意精度数字类型numeric和double precision举例说明。
(1)创建表:
class NumberTest(models.Model):
id = models.AutoField(primary_key=True)
col1 = models.IntegerField()# integer类型
col2 = models.DecimalField(max_digits=4,decimal_places=2)# numeric类型
col3 = model.FloatField()# double precision类型
class Meta():
db_table = 'numbertest'
(2)插入数据:
a = 1
b= decimal.Decimal(2.141)
c = 3.1415926
u = NumberTest(col1=a,col2=b,col3=c)
u.save()
(3)读取数据:
n1 = NumberTest.objects.get(id=1)
print(n1.col1)
print(n1.col2)
print(n1.col3)
日期/时间类型
日期/时间类型有timestamp、date、time 、interval。下面以timestamp 、date、time举例说明。
(1)创建表:
class DatetimeTest(models.Model):
id = models.AutoField(primary_key=True)
col1 = models.DateTimeField()# timestamp类型
col2 = models.DateField()# date类型
col3 = models.TimeField()# time类型
class Meta():
db_table = 'datetimetest'
(2)插入数据:
_now = datetime.now().replace(microsecond = 0)
u = DatetimeTest(col1=_now,col2=_now,col3=_now.time())
(3)读取数据:
d1 = DatetimeTest.objects.get(id=1)
print(d1.col1,d1.col2,d1.col3)
assert isinstance(d1.col1,datetime)
assert isinstance(d1.col2,date)
assert isinstance(dt.col3,time)