pythonjsonfield的簡單介紹

本文目錄一覽:

如何用python把protobuf轉化json

直接利用python提供的json包,在django model的定義中增加一個方法toJSON,利用django model 能訪問 _meta.fields 得到相關屬性而得到,例子如下:

class Category(models.Model):

autoid = models.AutoField(primary_key=True)

email=models.CharField(max_length=150,blank=False)

comtype=models.CharField(max_length=20,blank=False)

catname=models.CharField(max_length=150,blank=False)

def __unicode__(self):

return ‘%s’ % (self.catname)

def toJSON(self):

import json

return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))

然後用django查出數據,並轉換成json,代碼如下:

row=models.Category.objects.get(autoid=23)

print row.toJSON()

mysql對json取值路徑怎麼設置變量

我們知道,JSON是一種輕量級的數據交互的格式,大部分NO SQL數據庫的存儲都用JSON。MySQL從5.7開始支持JSON格式的數據存儲,並且新增了很多JSON相關函數。MySQL 8.0 又帶來了一個新的把JSON轉換為TABLE的函數JSON_TABLE,實現了JSON到表的轉換。

舉例一

我們看下簡單的例子:

簡單定義一個兩級JSON 對象

mysql set @ytt='{“name”:[{“a”:”ytt”,”b”:”action”},  {“a”:”dble”,”b”:”shard”},{“a”:”mysql”,”b”:”oracle”}]}’;Query OK, 0 rows affected (0.00 sec)

第一級:

mysql select json_keys(@ytt);+—————–+| json_keys(@ytt) |+—————–+| [“name”]        |+—————–+1 row in set (0.00 sec)

第二級:

mysql select json_keys(@ytt,’$.name[0]’);+—————————–+| json_keys(@ytt,’$.name[0]’) |+—————————–+| [“a”, “b”]                  |+—————————–+1 row in set (0.00 sec)

我們使用MySQL 8.0 的JSON_TABLE 來轉換 @ytt。

mysql select * from json_table(@ytt,’$.name[*]’ columns (f1 varchar(10) path ‘$.a’, f2 varchar(10) path ‘$.b’)) as tt;

+——-+——–+

| f1    | f2     |

+——-+——–+

| ytt   | action |

| dble  | shard  |

| mysql | oracle |

+——-+——–+

3 rows in set (0.00 sec)

舉例二

再來一個複雜點的例子,用的是EXPLAIN 的JSON結果集。

JSON 串 @json_str1。

set @json_str1 = ‘ {  “query_block”: {    “select_id”: 1,    “cost_info”: {      “query_cost”: “1.00”    },    “table”: {      “table_name”: “bigtable”,      “access_type”: “const”,      “possible_keys”: [        “id”      ],      “key”: “id”,      “used_key_parts”: [        “id”      ],      “key_length”: “8”,      “ref”: [        “const”      ],      “rows_examined_per_scan”: 1,      “rows_produced_per_join”: 1,      “filtered”: “100.00”,      “cost_info”: {        “read_cost”: “0.00”,        “eval_cost”: “0.20”,        “prefix_cost”: “0.00”,        “data_read_per_join”: “176”      },      “used_columns”: [        “id”,        “log_time”,        “str1”,        “str2”      ]    }  }}’;

第一級:

mysql select json_keys(@json_str1) as ‘first_object’;+—————–+| first_object    |+—————–+| [“query_block”] |+—————–+1 row in set (0.00 sec)

第二級:

mysql select json_keys(@json_str1,’$.query_block’) as ‘second_object’;+————————————-+| second_object                       |+————————————-+| [“table”, “cost_info”, “select_id”] |+————————————-+1 row in set (0.00 sec)

第三級:

mysql  select json_keys(@json_str1,’$.query_block.table’) as ‘third_object’\G*************************** 1. row ***************************third_object: [“key”,”ref”,”filtered”,”cost_info”,”key_length”,”table_name”,”access_type”,”used_columns”,”possible_keys”,”used_key_parts”,”rows_examined_per_scan”,”rows_produced_per_join”]1 row in set (0.01 sec)

第四級:

mysql select json_extract(@json_str1,’$.query_block.table.cost_info’) as ‘forth_object’\G*************************** 1. row ***************************forth_object: {“eval_cost”:”0.20″,”read_cost”:”0.00″,”prefix_cost”:”0.00″,”data_read_per_join”:”176″}1 row in set (0.00 sec)

那我們把這個JSON 串轉換為表。

SELECT * FROM JSON_TABLE(@json_str1,

“$.query_block”

COLUMNS(

rowid FOR ORDINALITY,

NESTED PATH ‘$.table’

COLUMNS (

a1_1 varchar(100) PATH ‘$.key’,

a1_2 varchar(100) PATH ‘$.ref[0]’,

a1_3 varchar(100) PATH ‘$.filtered’,

nested path ‘$.cost_info’

columns (

a2_1 varchar(100) PATH ‘$.eval_cost’ ,

a2_2 varchar(100) PATH ‘$.read_cost’,

a2_3 varchar(100) PATH ‘$.prefix_cost’,

a2_4 varchar(100) PATH ‘$.data_read_per_join’

),

a3 varchar(100) PATH ‘$.key_length’,

a4 varchar(100) PATH ‘$.table_name’,

a5 varchar(100) PATH ‘$.access_type’,

a6 varchar(100) PATH ‘$.used_key_parts[0]’,

a7 varchar(100) PATH ‘$.rows_examined_per_scan’,

a8 varchar(100) PATH ‘$.rows_produced_per_join’,

a9 varchar(100) PATH ‘$.key’

),

NESTED PATH ‘$.cost_info’

columns (

b1_1 varchar(100) path ‘$.query_cost’

),

c INT path “$.select_id”

)

) AS tt;

+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+

| rowid | a1_1 | a1_2  | a1_3   | a2_1 | a2_2 | a2_3 | a2_4 | a3   | a4       | a5    | a6   | a7   | a8   | a9   | b1_1 | c    |

+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+

|     1 | id   | const | 100.00 | 0.20 | 0.00 | 0.00 | 176  | 8    | bigtable | const | id   | 1    | 1    | id   | NULL |    1 |

|     1 | NULL | NULL  | NULL   | NULL | NULL | NULL | NULL | NULL | NULL     | NULL  | NULL | NULL | NULL | NULL | 1.00 |    1 |

+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+

2 rows in set (0.00 sec)

當然,JSON_table 函數還有其他的用法,我這裡不一一列舉了,詳細的參考手冊。

請點擊輸入圖片描述

初學Python照着寫了個爬蟲不知道錯誤在哪,怎麼改?

這是初學者經常犯的錯誤:

reply_info = json.loads(each.xpath(‘@data-field’)[0].replace(‘”‘,”))

reply_info這個數組有可能為0,所以要加個判斷,讓代碼在該數組為空時也能跑,如下:

field_01 = each.xpath(‘@data-field’)

if len(field_01) == 0:

continue

reply_info = json.loads(field_01[0].replace(‘”‘,”))

同理,下面獲取content和reply_time的數據時,也需要加入這個判斷,以後寫代碼也要養成這個習慣,加油~

Python模塊的幾種類型簡介

1、系統內置模塊

os模塊:os模塊包含普遍的操作系統功能

sys模塊:提供了一系列有關Python運行環境的變量和函數

random模塊:random模塊用於生成隨機數

time 模塊: 主要包含各種提供日期、時間功能的類和函數

datetime模塊:對time模塊的一個高級封裝

shutil模塊:是一種高層次的文件操作工具

logging模塊:將日誌打印到了標準輸出中

re模塊:可以直接調用來實現正則匹配

pymysql模塊:連接數據庫,並實現簡單的增刪改查

threading模塊:提供了更強大的多線程管理方案

queue模塊:實現了多生產者,多消費者的隊列

json模塊:用於字符串和數據類型間進行轉換json

2、開源(三方)模塊

Requests:最富盛名的http庫。每個Python程序員都應該有它。

Scrapy:從事爬蟲相關的工作,這個庫也是必不可少的。

NumPy:為Python提供了很多高級的數學方法。

matplotlib:一個繪製數據圖的庫。對於數據分析師非常有用。

Pygame:開發2D遊戲的時候可以用上 。

Scapy:用Python寫的數據包探測和分析庫。

Django:開源Web開發框架,它鼓勵快速開發,並遵循MVC設計,開發周期短。

Py2exe:將python腳本轉換為windows上可以獨立運行的可執行程序。

BeautifulSoup:基於Python的HTML/XML解析器,簡單易用。

PyGtk:基於Python的GUI程序開發GTK+庫。

3、自定義模塊

自定義模塊是自己寫的模塊,對某段邏輯或某些函數進行封裝後供其他函數調用。

注意:自定義模塊的命名一定不能和系統內置的模塊重名了,否則將不能再導入系統的內置模塊了。

例如:自定義了一個sys.py模塊後,再想使用系統的sys模塊是不能使用的。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238637.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:12
下一篇 2024-12-12 12:12

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進制下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論