SQLite의 자동 타임스탬프

Junaid khan 2023년6월21일
  1. SQLite 데이터베이스에 타임스탬프 추가
  2. SQLite에서 Datetime 또는 Timestamp 데이터 유형 사용
  3. SQLite 테이블에서 DateTime 검색
  4. SQLite에서 날짜와 시간 얻기
  5. SQLite 날짜 및 시간에 대한 텍스트 스토리지 클래스
SQLite의 자동 타임스탬프

C# 언어에서는 SQLite 데이터베이스를 사용하여 데이터베이스에서 값을 저장하고 검색합니다. 데이터베이스는 행과 열이 있는 다른 테이블을 포함할 수 있습니다. 테이블에 새 레코드를 추가하면 타임스탬프가 null인 새 행이 추가됩니다. 타임스탬프가 필요할 때 새 행이나 특정 정보가 날짜 및 시간별 형식으로 테이블에 추가되는 시기를 확인할 수 있습니다. 자동 타임스탬프를 얻으려면 Datetime 데이터 유형으로 정보를 검색하거나 별도의 정보로 날짜 및 시간을 검색합니다.

SQLite 데이터베이스에 타임스탬프 추가

SQLite 데이터베이스에 타임스탬프를 추가하는 가장 좋은 솔루션은 데이터베이스에 테이블을 생성하는 동안 DATETIME 데이터 유형의 타임스탬프 필드를 추가하는 것입니다. Timestamp의 데이터 유형은 SQLite 데이터베이스에서 DateTime이어야 합니다.

CREATE TABLE NameOfTheTable(
    myID INTEGER PRIMARY KEY,
    First_Name TEXT,
    Other FIELDS (if needed),
    Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

출력:

Creates the table with provided fields and last field timestamp

이 테이블 내에 새 항목이 있는 경우 테이블은 TimeStamp 필드 내부에 제공된 정보와 현재 시간이 포함된 새 행을 삽입합니다. 그러나 사용자가 명시적으로 NULL 값으로 설정한 경우 이 필드를 NULL로 채울 수 있습니다.

예를 들어, 다음 명령을 사용하여 위에서 만든 테이블에 다른 행을 삽입하려고 합니다.

INSERT INTO NameOfTheTable(First_Name, sqltime) VALUES('case1', '2020-07-28T15:36:56.200');
INSERT INTO NameOfTheTable(First_Name, sqltime) VALUES('case2', '2020-10-28T13:40:02.200');
# here, the time value will be recorded as NULL
INSERT INTO NameOfTheTable(First_Name) VALUES('case3');

이제 SELECT 명령을 사용하여 테이블 내의 모든 레코드를 표시해야 합니다.

SELECT * FROM NameOfTheTable;

출력:

1:case1:2020-07-28T15:36:56.200
2:case2:2020-07-28T15:36:56.200
3:case3:2022-11-11 05:38:20

SQLite에서 Datetime 또는 Timestamp 데이터 유형 사용

SQLite에서 레코드 내부의 변경 사항을 추적해야 할 때 이러한 레코드는 타임스탬프 데이터 유형으로 업데이트됩니다. 따라서 필드에 특정 시간을 지정하려면 필드에 DateTime 데이터 유형을 사용해야 합니다.

기본 DateTime 데이터 유형에 대해 다음 계산을 수행할 수 있으므로 UNIX 타임스탬프 또는 기본 SQLite DateTime 필드 간에 비교가 있을 때마다 항상 DateTime 데이터 유형을 선택해야 합니다.

SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)

이 명령을 사용하여 DateTime의 형식을 UNIX 타임스탬프로 변경할 수도 있습니다.

SELECT UNIX_TIMESTAMP(my_datetime)

SQLite 테이블에서 DateTime 검색

DateTime 데이터 유형을 SQLite 데이터베이스에 삽입하면 먼저 문자열 유형으로 변환한 다음 테이블에 삽입합니다. 마찬가지로 DateTime 데이터 유형의 데이터를 가져올 때 sqlite3 모듈은 먼저 이를 문자열로 변환합니다.

개념을 이해하기 위해 예를 들어보자. insertQuery() 함수는 id(테이블에 새 레코드가 추가되면 기본 키가 자동으로 증가함), my_name(이름을 저장하기 위한 비어 있지 않은 문자열 필드) 및 마지막으로 Join_date(타임스탬프 데이터 유형 형식 사용)로 세 가지 매개변수를 사용합니다. ).

또한 이 프로그램은 시간을 문자열 형식이 아닌 타임스탬프 형식으로 반환합니다.

import datetime
import sqlite3


def insertQuery(id, my_name, joiningDate):
    try:
        sqliteConnection = sqlite3.connect(
            "SQLite.db", detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES
        )
        cursor = sqliteConnection.cursor()
        print("SQLite Database is connected.")

        # query to create a new table with three fields
        sqlite_create_table_query = """CREATE TABLE new_table (
                                       id INTEGER PRIMARY KEY,
                                       my_name TEXT NOT NULL,
                                       joiningDate timestamp);"""

        cursor = sqliteConnection.cursor()
        cursor.execute(sqlite_create_table_query)

        # insert the new table information here
        sqlite_insert_with_param = """INSERT INTO 'new_table'
                          ('id', 'my_name', 'joiningDate')
                          VALUES (?, ?, ?);"""

        data_tuple = (id, my_name, joiningDate)
        cursor.execute(sqlite_insert_with_param, data_tuple)
        sqliteConnection.commit()
        print("New record added successfully \n")

        # to get the timestamp information from the table
        sqlite_select_query = (
            """SELECT my_name, joiningDate from new_table where id = ?"""
        )
        cursor.execute(sqlite_select_query, (1,))
        records = cursor.fetchall()

        # the return type of datetime is not string now.
        for row in records:
            developer = row[0]
            joining_Date = row[1]
            print(developer, " joined on", joiningDate)
            print("Date type is ", type(joining_Date))

        cursor.close()

    # if an exception is found in sqlite version 3.
    except sqlite3.Error as error:
        print("Error with SQLite database", error)
    finally:
        if sqliteConnection:
            sqliteConnection.close()
            print("Closed connection for SQLite database.")


insertQuery(0, "NewName", datetime.datetime.now())

출력:

SQLite Database is connected.
New record added successfully

NewName  joined on 2019-06-28 20:57:32.352790
Date type is <class 'datetime.datetime'>
Closed connection for SQLite database.

SQLite에서 날짜와 시간 얻기

Unix 타임스탬프의 경우 SQLite DATETIME()의 함수를 unixepoch 인수와 함께 사용하여 실제 날짜 및 시간을 계산할 수 있습니다. 또는 DATE() 함수를 사용하여 날짜 정보만 가져오고 TIME() 함수를 사용하여 시간 섹션 부분을 반환할 수 있습니다.

날짜 및 시간 확인

SELECT DATETIME(1793956207, 'unixepoch');

출력:

2022-11-06 10:09:03

날짜를 잡아

SELECT DATE(1793956207, 'unixepoch');

출력:

2022-11-06

시간을 잡아

SELECT TIME(1793956207, 'unixepoch');

출력:

10:09:03

SQLite 날짜 및 시간에 대한 텍스트 스토리지 클래스

SQLite에서는 기본 제공 메서드를 사용하여 데이터베이스 내에서 날짜와 시간을 처리합니다. 상호 작용할 내장 클래스가 있는 SQLite와 달리 SQLite 데이터베이스에는 지원을 위한 날짜 및 시간 내장 함수가 있습니다.

SQLite 데이터베이스에서 날짜와 시간을 설정하기 위해 TEXT 스토리지 클래스를 사용할 때 다음 형식을 사용해야 합니다.

YYYY-MM-DD HH:MM:SS.SSS

이 형식의 결과는 2019-02-02 11:21:08.321입니다.