我想知道如何在序列化时减少对数据库的调用次数:
我有以下两种型号:
class House(models.Model):
name = models.CharField(max_length = 100, null = True, blank = True)
address = models.CharField(max_length = 500, null = True, blank = True)
class Room(models.Model):
house = models.ForeignKey(House)
name = models.CharField(max_length = 100)
Run Code Online (Sandbox Code Playgroud)
有1个房子,它可以有多个房间.
我正在使用django-rest-framework并尝试在房屋级别将所有3个事物序列化.
class HouseSerializer(serializers.ModelSerializer)
rooms = serializers.SerializerMethodField('room_serializer')
def room_serializer(self):
rooms = Room.objects.filter(house_id = self.id) # we are in House serializer, so self is a house
return RoomSerializer(rooms).data
class Meta:
model = House
fields = ('id', 'name', 'address')
Run Code Online (Sandbox Code Playgroud)
所以现在,对于我想要序列化的每个房子,我需要单独调用它的房间.它有效,但这是一个额外的电话.(想象一下我试图把很多东西包在一起!)
现在,如果我有100个房子,为了序列化所有内容,我需要在O(n)时间内进行100次数据库命中
如果我可以将所有信息放在一起,我知道我可以减少到2次点击.O(1)时间
my_houses = Houses.objects.filter(name = …Run Code Online (Sandbox Code Playgroud) 新的连接到数据库,并不知道从哪里开始进行故障排除 -
我目前正在使用HeidiSQL连接到亚马逊网络服务 - EC2上托管的外部Mysql数据库服务器.
我能够使用HeidiSQL访问数据库的设置:MySQL(SSH隧道)主机名/ IP:127.0.0.1用户:(用户)密码:(pw)端口3306
在SSH隧道选项卡中:plink.exe位置设置为putty.exe sshhost + port :(我的主机ip)端口22私钥文件:(已设置)本地端口:3307
使用此配置我能够登录我的数据库.我的问题是当我尝试使用端口转发使用我自己的putty命令时:
在Putty:我设置SSH>隧道 - 源端口:3307,目标(我的主机IP):3306本地和自动.我用我的密码和hostip连接
回到HeidiSQL,我将我的设置设置为:MYSL(TCP/IP)主机名:localhost用户:(用户)密码(pw)端口3307
并尝试连接.我收到以下错误:SL ERROR(2013):在'读取初始通信数据包'时失去与MySQL服务器的连接,系统错误:0
从我读到的,这意味着我的ssh隧道正在工作,但其他错误.我现在不知道为什么这不起作用.我没有正确设置其他东西吗?防火墙自己?我的最终目标是使用相同的端口转发思想连接另一个应用程序以使用ODBC或JDBC与数据库进行通信.是否有日志要检查?
我需要采用一个在EPOCH中具有字段"starttime"的表单并将其转换为
当我有:
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True
class Meta:
ordering = ('created',)
Run Code Online (Sandbox Code Playgroud)
import time
class SnippetSerializer(serializers.ModelSerializer):
starttime = serializers.SerializerMethodField('epoch')
def epoch(self, obj):
""" Return epoch time for a datetime object or ``None``"""
try:
return int(time.mktime(obj.created.timetuple()))
except (AttributeError, TypeError):
return None
class Meta:
model = Snippet
fields = ('starttime')
Run Code Online (Sandbox Code Playgroud)
如果我:
"GET"/ snippets/1 /
{"id":1,'starttime':13232111}
我希望能够做到:
"POST"/ snippets/1/{"id":1,'starttime':1}
{"id":1,'starttime':1}
现在,它只是忽略了请求.我被迫使用unix纪元时间来符合现有的API.
我刚刚开始使用Django REST框架,并且需要在序列化时自定义DATETIME字段以解除时代(整数)
我现在有
/models.py
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
/serializers.py
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('created')
Run Code Online (Sandbox Code Playgroud)
当我通过API调用代码段时,我得到了STR格式的典型DATETIME.
如何更改SnippetSerializer以转换为EPOCH.此外,当有人发布信息时,它会在EPOCH中回复给我,我需要将其转换为DATETIME.有任何想法吗?
我正在寻找一种在列表中实现相等堆的方法,该列表可以采用 N 个元素的列表并将其拆分为 M 个堆。任何余数一次添加到每一堆。我觉得那里可能已经有什么东西了。
List: [1 2 3 4 5 6 7 8 9]
M = 5
[[1] [2] [3] [4] [5]]; divided into equal piles with remainder [6 7 8 9]
[[1 6] [2 7] [3 8] [4 9] [5]]; output
Run Code Online (Sandbox Code Playgroud)
但我并不真正关心每一堆中的实际数字。只要(计数元素)是所有其他元素的 +/-。
我找到了partion-all,但它没有按照我需要的方式处理剩余部分,而且我无法让程序获取生成列表的最后一个元素并将其粘贴到前几堆中。