欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python pymysql peewee關于時區(qū)問題分析

 更新時間:2023年06月19日 10:05:44   作者:ponponon  
這篇文章主要為大家介紹了python pymysql peewee關于時區(qū)問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

研究的問題:如果我插入一個 datetime 的 tzinfo 北京時區(qū)的,peewee insert 的時候,會幫我轉成 utc 再插入嗎?

答案:不會

研究過程

我們通過

  • peewee 返回對的 sql
  • peewee 內部的 sql
  • 以及 wireshark 抓包獲取的 sql

驗證判斷

from loguru import logger
import settings
from peewee import *
from datetime import datetime, timedelta, timezone
import time
import contextlib
def get_min_utc_timestamp() -> datetime:
    return (datetime(year=1970, month=1, day=1) + timedelta(seconds=1)).replace(tzinfo=timezone.utc)
def get_utc_now_timestamp() -> datetime:
    """ https://blog.csdn.net/ball4022/article/details/101670024 """
    return datetime.utcnow().replace(tzinfo=timezone.utc)
def get_cst_now_timestamp() -> datetime:
    """ https://segmentfault.com/q/1010000043912065 """
    try:
        from zoneinfo import ZoneInfo
        tz = ZoneInfo('Asia/Shanghai')
        return datetime.now(tz)
    except ImportError:
        beijing_offset = timedelta(hours=8)
        current_time = datetime.now(timezone(beijing_offset))
        return current_time
host = settings.MYSQL_CONFIG.host
port = settings.MYSQL_CONFIG.port
username = settings.MYSQL_CONFIG.username
password = settings.MYSQL_CONFIG.password
database_name = settings.MYSQL_CONFIG.database_name
db = MySQLDatabase(
    database=database_name,
    host=host,
    port=port,
    user=username,
    password=password,
    charset='utf8mb4'
)
class User(Model):
    name = CharField(unique=True)
    age = IntegerField(null=True)
    address = CharField(null=True)
    city = CharField(null=True)
    birth = DateTimeField(null=True)
    created_at = DateTimeField(
        null=False,
        constraints=[SQL('DEFAULT CURRENT_TIMESTAMP')],
        help_text='使用數(shù)據(jù)庫時間'
    )
    updated_at = DateTimeField(
        null=False,
        constraints=[
            SQL('DEFAULT CURRENT_TIMESTAMP'),
            SQL('ON UPDATE CURRENT_TIMESTAMP'),
        ]
    )
    class Meta:
        database = db
        table_name = 'user'
model_set = [User]
db.drop_tables(model_set)
db.create_tables(model_set)
d = get_cst_now_timestamp()
print(d)
q = User.select().where(
    User.age == 1,
    User.birth == d
)
print('> sql', str(q))
list(q)
q = User.insert({'created_at': d})
logger.debug(str(q))
q.execute()

修改 peewee 的源碼

輸出如下:

>>> execute_sql sql SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type != %s ORDER BY table_name
>> execute sql DROP TABLE IF EXISTS `user`
>>> execute_sql sql DROP TABLE IF EXISTS `user`
>>> execute_sql sql SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type != %s ORDER BY table_name
>> execute sql CREATE TABLE IF NOT EXISTS `user` (`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `age` INTEGER, `address` VARCHAR(255), `city` VARCHAR(255), `birth` DATETIME, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
>>> execute_sql sql CREATE TABLE IF NOT EXISTS `user` (`id` INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `age` INTEGER, `address` VARCHAR(255), `city` VARCHAR(255), `birth` DATETIME, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
>> execute sql CREATE UNIQUE INDEX `user_name` ON `user` (`name`)
>>> execute_sql sql CREATE UNIQUE INDEX `user_name` ON `user` (`name`)
2023-06-17 14:26:22.111281+08:00
> sql SELECT `t1`.`id`, `t1`.`name`, `t1`.`age`, `t1`.`address`, `t1`.`city`, `t1`.`birth`, `t1`.`created_at`, `t1`.`updated_at` FROM `user` AS `t1` WHERE ((`t1`.`age` = 1) AND (`t1`.`birth` = '2023-06-17 14:26:22.111281+08:00'))
>> execute sql SELECT `t1`.`id`, `t1`.`name`, `t1`.`age`, `t1`.`address`, `t1`.`city`, `t1`.`birth`, `t1`.`created_at`, `t1`.`updated_at` FROM `user` AS `t1` WHERE ((`t1`.`age` = %s) AND (`t1`.`birth` = %s))
>>> execute_sql sql SELECT `t1`.`id`, `t1`.`name`, `t1`.`age`, `t1`.`address`, `t1`.`city`, `t1`.`birth`, `t1`.`created_at`, `t1`.`updated_at` FROM `user` AS `t1` WHERE ((`t1`.`age` = %s) AND (`t1`.`birth` = %s))
2023-06-17 14:26:22.116 | DEBUG    | __main__:<module>:68 - INSERT INTO `user` (`created_at`) VALUES ('2023-06-17 14:26:22.111281+08:00')
>> execute sql INSERT INTO `user` (`created_at`) VALUES (%s)
>>> execute_sql sql INSERT INTO `user` (`created_at`) VALUES (%s)
self._query_type 0

 注意,我現(xiàn)在測試的時間,就是北京時間下午2點

查看 wireshark 的時間

可以看到,抓包獲得的時間,都是下午2點,說明沒有發(fā)生時區(qū)轉換

數(shù)據(jù)中寫入的時間,也是下午兩點,說明沒錯

以上就是python pymysql peewee關于時區(qū)問題分析的詳細內容,更多關于python pymysql peewee時區(qū)的資料請關注腳本之家其它相關文章!

相關文章

  • 簡單談談python基本數(shù)據(jù)類型

    簡單談談python基本數(shù)據(jù)類型

    在Python中,能夠直接處理的數(shù)據(jù)類型有以下幾種:#整型 int,#浮點型 float,#布爾型 bool,#復數(shù)型 (在python中用小寫 j ,表示虛部,用其他的字母不行)complex
    2018-09-09
  • Caffe卷積神經(jīng)網(wǎng)絡數(shù)據(jù)層及參數(shù)

    Caffe卷積神經(jīng)網(wǎng)絡數(shù)據(jù)層及參數(shù)

    這篇文章主要為大家介紹了Caffe卷積神經(jīng)網(wǎng)絡數(shù)據(jù)層及參數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • django如何計算兩個TimeField的時差

    django如何計算兩個TimeField的時差

    在Django中,可以使用datetime模塊來計算兩個TimeField字段的時間差,下面通過示例代碼介紹django?計算兩個TimeField的時差,需要的朋友可以參考下
    2023-05-05
  • 如何通過Python實現(xiàn)標簽云算法

    如何通過Python實現(xiàn)標簽云算法

    這篇文章主要介紹了如何通過Python實現(xiàn)標簽云算法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python微元法計算函數(shù)曲線長度的方法

    python微元法計算函數(shù)曲線長度的方法

    今天小編就為大家分享一篇python微元法計算函數(shù)曲線長度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python pycurl驗證basic和digest認證的方法

    python pycurl驗證basic和digest認證的方法

    這篇文章主要介紹了python pycurl驗證basic和digest認證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 全面解讀Python Web開發(fā)框架Django

    全面解讀Python Web開發(fā)框架Django

    Django是一個開源的Web應用框架,由Python寫成。采用MVC的軟件設計模式,主要目標是使得開發(fā)復雜的、數(shù)據(jù)庫驅動的網(wǎng)站變得簡單。Django注重組件的重用性和“可插拔性”,敏捷開發(fā)和DRY法則(Don’t Repeat Yoursef)。
    2014-06-06
  • Python一文入門Flask?Blueprint?SQLAlchemy部分詳解

    Python一文入門Flask?Blueprint?SQLAlchemy部分詳解

    這篇文章主要為大家介紹了Python一文入門Flask?Blueprint?SQLAlchemy部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python中字符串轉換為列表的常用方法總結

    Python中字符串轉換為列表的常用方法總結

    本文將詳細介紹Python中將字符串轉換為列表的八種常用方法,每種方法都具有其獨特的用途和適用場景,文中的示例代碼講解詳細,感興趣的可以了解下
    2023-11-11
  • Python中itertools庫的四個函數(shù)介紹

    Python中itertools庫的四個函數(shù)介紹

    這篇文章主要介紹了Python中itertools庫的四個函數(shù),主要討論itertools庫中的十分使用的幾個函數(shù),并重點介紹什么時候我們應該考慮使用它們,需要的朋友可以參考一下
    2022-04-04

最新評論