GVKun编程网logo

如何通过 django restapi 将值插入到 mysql 数据库中

1

本文将带您了解关于如何通过djangorestapi将值插入到mysql数据库中的新内容,另外,我们还将为您提供关于1亿条数据如何分表100张到Mysql数据库中(PHP)、DjangoRestAPI

本文将带您了解关于如何通过 django restapi 将值插入到 mysql 数据库中的新内容,另外,我们还将为您提供关于1 亿条数据如何分表 100 张到 Mysql 数据库中(PHP)、Django RestAPI - AssertionError:期望返回`Response`、`HttpResponse`或`HttpStreamingResponse`、Django RestAPI - 仅允许使用 JWT 身份验证访问用户数据、Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误的实用信息。

本文目录一览:

如何通过 django restapi 将值插入到 mysql 数据库中

如何通过 django restapi 将值插入到 mysql 数据库中

如何解决如何通过 django restapi 将值插入到 mysql 数据库中

我最近遇到了一些麻烦, 我创建了 2 个表,分别是 User 和 Phones

models.py

  1. TO_TIMESTAMP_TZ (timestampvalue,''YYYY-MM-DDHH:MI:sstZH:TZM'')

我想发送这样的帖子请求:

  1. from django.db import models
  2. class User(models.Model):
  3. userid = models.AutoField(primary_key=True,default=None)
  4. name = models.CharField(max_length= 100)
  5. age = models.IntegerField()
  6. class Meta:
  7. db_table = ''user''
  8. class Phones(models.Model):
  9. phoneId = models.AutoField(primary_key=True,default=None)
  10. userid = models.IntegerField(null=False)
  11. numbers = models.CharField(max_length = 15,null=True)
  12. phonesCountryCode = models.CharField(max_length=5,null=True)
  13. class Meta:
  14. db_table = ''phones''

可以将多个数据添加到两个数据库中。 我创建了一个视图并尝试添加这样的数据但失败了

views.py :

  1. "User": [
  2. {
  3. "name": "abc","age": 100"
  4. },{
  5. "name": "pqr","age": 50
  6. },{
  7. "name": "xyz","age": 80
  8. }
  9. ],"Phones": [
  10. {
  11. "numbers": "65452124","phonesCountryCode": "+93"
  12. },{
  13. "numbers": "45215124","phonesCountryCode": "+93"
  14. }
  15. ]

finaly serializer.py

  1. lass Updateall(APIView):
  2. def post(self,request ):
  3. userid = User.objects.latest(''userid'').userid
  4. name = request.data.get(''name'')
  5. age = request.data.get(''age'')
  6. numbers = request.data.get(''numbers'')
  7. phonesCountryCode = request.data.get(''phonesCountryCode'')
  8. User_Serializer = UserSerializer(data={"name":name,"age":age})
  9. if User_Serializer.is_valid(raise_exception=True):
  10. User_Serializer.save()
  11. Phone_Serializer = Phoneserializer(data={"userid":userid,"numbers":numbers,"phonesCountryCode":phonesCountryCode})
  12. if Phone_Serializer.is_valid(raise_exception=True):
  13. Phone_Serializer.save()
  14. return Response({''status'': ''Success''})

请帮我将多个数据添加到数据库中

解决方法

  1. class UpdateAll(ApiView):
  2. data = request.data
  3. user_data = data[''User'']
  4. for user in user_data:
  5. new_user = UserSerializer(data=user)
  6. if new_user.is_valid():
  7. new_user.save()
  8. phone_data = data[''Phones'']
  9. for phone in phone_data:
  10. new_phone = PhoneSerializer(data=phone)
  11. if new_phone.is_valid():
  12. new_phone.save()
  13. return Response({''status'':200,''message'':''success''})

1 亿条数据如何分表 100 张到 Mysql 数据库中(PHP)

1 亿条数据如何分表 100 张到 Mysql 数据库中(PHP)

这篇文章主要介绍了当数据量猛增的时候如何把一亿条数据分表 100 张到 Mysql 数据库中,需要的朋友可以参考下

下面通过创建 100 张表来演示下 1 亿条数据的分表过程,具体请看下文代码。

当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1 亿条数据,分 100 张表。具体实现过程如下:

首先创建 100 张表:

?

1

2

3

4

5

6

7

8

9

10

$i=0;

while($i<=99){

echo "$newNumber \r\n";

$sql="CREATE TABLE `code_".$i."` (

`full_code` char(10) NOT NULL,

`create_time` int(10) unsigned NOT NULL,

PRIMARY KEY (`full_code`),

) ENGINE=MyISAM DEFAULT CHARSET=utf8";

mysql_query($sql);

$i++;

下面说一下我的分表规则,full_code 作为主键,我们对 full_code 做 hash

函数如下:

?

1

2

3

4

5

6

7

$table_name=get_hash_table(''code'',$full_code);

function get_hash_table($table,$code,$s=100){

$hash = sprintf("%u", crc32($code));

echo $hash;

$hash1 = intval(fmod($hash, $s));

return $table."_".$hash1;

}

这样插入数据前通过 get_hash_table 获取数据存放的表名。

最后我们使用 merge 存储引擎来实现一张完整的 code 表

?

1

2

3

4

5

CREATE TABLE IF NOT EXISTS `code` (

`full_code` char(10) NOT NULL,

`create_time` int(10) unsigned NOT NULL,

INDEX(full_code)

) TYPE=MERGE UNION=(code_0,code_1,code_2.......) INSERT_METHOD=LAST ;

这样我们通过 select * from code 就可以得到所有的 full_code 数据了。

以上介绍就是本文的全部内容,希望对大家有所帮助。

Django RestAPI - AssertionError:期望返回`Response`、`HttpResponse`或`HttpStreamingResponse`

Django RestAPI - AssertionError:期望返回`Response`、`HttpResponse`或`HttpStreamingResponse`

GET 方法应始终返回 HttpResponse 对象,您可以使用 JsonResponse 对象,它是 HttpResponse 的子类,有助于创建 JSON 编码的响应。

试试这个

from django.http import JsonResponse

class SymbolInformation(APIView):
    ''''''
    Returns the Symbol Information
    ''''''
    def get(self,request,symbolname=''NIFTY50''):
        # Capturing Inputs in Appropriate Cases
        symbolname = symbolname.upper()
        (companyname,symbol,tablename,close,change,returns,upperband,lowerband,has_fno,weekly_expiry,weekly_future,lotsize,isIndex,stepvalue) = get_symbol_details(symbolname=symbolname)
        data = SymbolInformationSerializer()
        print(companyname,stepvalue)
        data = {''companyname'': companyname,''symbol'': symbol,''tablename'': tablename,''close'': close,''change'': change,''returns'': returns,''upperband'': upperband,''lowerband'': lowerband,''has_fno'': has_fno,''weekly_expiry'': weekly_expiry,''weekly_future'': weekly_future,''lotsize'': lotsize,''isIndex'': isIndex,''stepvalue'': stepvalue}
        print(data)
        output = SymbolInformationSerializer(data)
        print(output.data)
        return JsonResponse(output.data)

Django RestAPI - 仅允许使用 JWT 身份验证访问用户数据

Django RestAPI - 仅允许使用 JWT 身份验证访问用户数据

如何解决Django RestAPI - 仅允许使用 JWT 身份验证访问用户数据

我有以下 API:

型号:

  1. class Todo(models.Model):
  2. owner = models.ForeignKey(User,on_delete=models.CASCADE)
  3. name = models.CharField(max_length=20,default="")
  4. text = models.TextField(max_length=450,default="")
  5. done = models.BooleanField(default=False)

查看:

  1. class TodoView(viewsets.ModelViewSet):
  2. serializer_class = TodoSerializer
  3. permission_classes = [IsAuthenticated]
  4. def get_queryset(self):
  5. id = self.request.query_params.get("id")
  6. queryset = Todo.objects.filter(owner__id=id)
  7. return queryset

序列化器:

  1. class TodoSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = Todo
  4. fields = ("id","owner","name","text","done")

我使用 rest_framework_simplejwt 作为我的令牌,并使用以下路径来接收我的令牌:

  1. path("api/token/",TokenObtainPairView.as_view(),name="token_obtain_pair"),

这是令牌:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjE5Mjg4ODAwLCJqdGkiOiJhY2E4MjM5ZGMyZjA0NGE5YWE4NzM3NWZjMDc2NWQ0YSIsInVzZXJfaWQiOjF9.xJ4s971XE0c9iX0Ar1HQSE84u_LbDKLL4imswYsk2U8

当我在 jwt.io 上解码时,我可以看到它包含用户 ID:

  1. {
  2. "token_type": "access","exp": 1619288800,"jti": "aca8239dc2f044a9aa87375fc0765d4a","user_id": 1
  3. }

在我的请求标头中没有令牌的 http://localhost:8000/todos/?id=1 上的请求不起作用(很好!),但有了令牌,我也可以访问 http://localhost:8000/todos/?id=2,这当然是不受欢迎的。我只想访问 http://localhost:8000/todos/?id=1(来自有效负载的相应 user_id

我该怎么做?

解决方法

更改您的 get_queryset 方法:

  1. def get_queryset(self):
  2. reque Todo.objects.filter(owner=self.request.user)

现在任何人都只能访问自己的 Todo 记录。

网址应该是这样的http://localhost:8000/todos/<id>

额外: 不要从客户那里拿走 owner。而是自己设置。 如下图。

  1. class TodoSerializer(serializers.ModelSerializer):
  2. owner = serializers.HiddenField(default=serializers.CurrentUserDefault())
  3. class Meta:
  4. model = Todo
  5. fields = ("id","owner","name","text","done")

Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误

Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误

如何解决Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误

我想我更接近我的 API 问题,但我仍然收到以下错误:

  1. TypeError: Field ''id'' expected a number but got <built-in function id>.

型号:

  1. from django.contrib.auth.models import User
  2. class Todos(models.Model):
  3. owner = models.ForeignKey(User,on_delete=models.CASCADE)
  4. name = models.CharField(max_length=20,default="")
  5. text = models.TextField(max_length=450,default="")
  6. done = models.BooleanField(default=False)

序列化器:

  1. class TodosSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = Todos
  4. fields = ("id","owner","name","text","done")

查看:

  1. class TodosView(viewsets.ModelViewSet):
  2. queryset = Todos.objects.filter(owner__id=id)
  3. serializer_class = TodosSerializer

网址:

  1. router = routers.DefaultRouter()
  2. router.register("todos/<int:id>",views.TodosView)
  3. urlpatterns = [path("",include(router.urls))]

我想获取单个用户的所有待办事项。我在这里做错了什么?

编辑:

  1. queryset = Todos.objects.filter(owner__id=1)

这实际上不会产生错误。我的网址似乎有问题:

  1. http://localhost:8000/todos/%3Cint:id%3E/

我们今天的关于如何通过 django restapi 将值插入到 mysql 数据库中的分享已经告一段落,感谢您的关注,如果您想了解更多关于1 亿条数据如何分表 100 张到 Mysql 数据库中(PHP)、Django RestAPI - AssertionError:期望返回`Response`、`HttpResponse`或`HttpStreamingResponse`、Django RestAPI - 仅允许使用 JWT 身份验证访问用户数据、Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误的相关信息,请在本站查询。

本文标签: