source

MySQL에 Python datetime.datetime 개체 삽입

gigabyte 2023. 2. 6. 23:39
반응형

MySQL에 Python datetime.datetime 개체 삽입

MySQL 테이블에 날짜 열이 있습니다.삽입하고 싶다datetime.datetime()이 컬럼에 오브젝트를 입력합니다.execute 스테이트먼트에서는 무엇을 사용해야 합니까?

시도했습니다.

now = datetime.datetime(2009,5,5)

cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))

다음과 같은 오류가 발생합니다."TypeError: not all arguments converted during string formatting"대신 뭘 쓰면 좋을까요?%s?

시간 필드의 경우 다음을 사용합니다.

import time    
time.strftime('%Y-%m-%d %H:%M:%S')

생각합니다strftime에도 적용되다datetime.

날짜 열 값 주위에 따옴표가 필요하기 때문에 TypeError가 표시될 가능성이 높습니다.

시험:

now = datetime.datetime(2009, 5, 5)

cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, '%s')",
               ("name", 4, now))

포맷에 관해서는 위의 명령어(밀리초 포함)와 다음 명령어로 성공하였습니다.

now.strftime('%Y-%m-%d %H:%M:%S')

이게 도움이 됐으면 좋겠다.

사용해보십시오.now.date()을 얻다Date보다 반대하다DateTime.

이것이 동작하지 않는 경우는, 그것을 문자열로 변환합니다.

now = datetime.datetime(2009,5,5)
str_now = now.date().isoformat()
cursor.execute('INSERT INTO table (name, id, datecolumn) VALUES (%s,%s,%s)', ('name',4,str_now))

Python 메서드를 사용합니다. 여기서 format ='%Y-%m-%d %H:%M:%S'.

import datetime

now = datetime.datetime.utcnow()

cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, %s)",
               ("name", 4, now.strftime('%Y-%m-%d %H:%M:%S')))

타임존

타임존이 문제가 될 경우 MySQL 타임존을 다음과 같이 UTC로 설정할 수 있습니다.

cursor.execute("SET time_zone = '+00:00'")

타임존은 Python으로 설정할 수 있습니다.

now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)

MySQL 문서

MySQL은 다음 형식의 DATETIME 및 TIMESTAMP 값을 인식합니다.

'YYY-MM-DD HH'의 문자열로서:MM:SS' 또는 'YY-MM-DD HH:MM:SS' 형식입니다.여기서도 "완전" 구문을 사용할 수 있습니다. 날짜 부분 또는 시간 부분 사이의 구분자로 모든 구두점을 사용할 수 있습니다.예를 들어 '2012-12-31 11:30:45', '2012^12^31 11+30+45', '2012/12/31 11*30*45', '2012@12@31 11^30^45' 등가 된다.

날짜와 시간 부분과 소수 초 부분 사이에 인식되는 유일한 구분 기호는 소수점입니다.

날짜와 시간 부분은 공백이 아닌 T로 구분할 수 있습니다.예를 들어 '2012-12-31 11:30:45' '2012-12-31T11:30:45'는 동일합니다.

'YYYMMDDHHMMSS' 또는 'YYMMDDHHMMSS' 형식의 구분자가 없는 문자열로, 날짜로 의미가 있는 문자열입니다.예를 들어, '20070523091528' 및 '070523091528'은 '2007-05-23 09:15:28'로 해석되지만, '071122129015'는 불법(비논리적인 미세한 부분이 있음)이며 '0000-00 00:00:00'이 됩니다.

YYYMMDDHHMMSS 또는 YYMMDDHHMMSS 형식의 수치로서, 날짜로서 의미가 있는 경우.예를 들어 19830905132800 및 830905132800은 '1983-09-05 13:28:00'로 해석됩니다.

어떤 데이터베이스에 접속하고 있습니까?Oracle은 날짜 형식에 까다롭고 ISO 8601 형식을 좋아합니다.

**주의: MySQL에 접속되어 있는 것을 확인했습니다.날짜 형식을 지정하고 별도의 직접 SQL 호출로 테스트해 보십시오.

Python에서는 다음과 같은 ISO 날짜를 얻을 수 있습니다.

now.isoformat()

예를 들어 Oracle은 다음과 같은 날짜를 좋아합니다.

insert into x values(99, '31-may-09');

데이터베이스에 따라 Oracle인 경우 TO_DATE가 필요할 수 있습니다.

insert into x
values(99, to_date('2009/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));

TO_DATE의 일반적인 사용법은 다음과 같습니다.

TO_DATE(<string>, '<format>')

다른 데이터베이스를 사용하는 경우(커서를 보고 Oracle이 틀릴 수 있다고 생각했다), 날짜 형식 도구를 확인합니다.MySQL의 경우 DATE_FORMAT()이고 SQL Server는 CONVERT입니다.

또한 SQL Chemy와 같은 도구를 사용하면 이와 같은 차이를 제거하고 생활을 쉽게 할 수 있습니다.

python datetime.date(datetime.datetime)는 python datetime.datetime으로 지정합니다.(mysql, python 2.7, Ubuntu).[ ] published_date 변수 MySQL, python 변수 MySQL 입니다.publish_datedatetime.date

# make the record for the passed link info
sql_stmt = "INSERT INTO snippet_links (" + \
    "link_headline, link_url, published_date, author, source, coco_id, link_id)" + \
    "VALUES(%s, %s, %s, %s, %s, %s, %s) ;"

sql_data = ( title, link, str(publish_date), \
             author, posted_by, \
             str(coco_id), str(link_id) )

try:
    dbc.execute(sql_stmt, sql_data )
except Exception, e:
    ...
    dt= datetime.now()

    query = """INSERT INTO table1(python_Date_col)
               VALUES (%s)
            """
    conn = ...... # Connection creating process
    cur = conn.cursor()
    cur.execute(query,(dt))

위의 코드는 "datetime.now()"가 문을 삽입하는 파라미터 값으로 "datetime.datetime(2014, 2, 11, 1, 16)"을 생성하기 때문에 실패합니다.

문자열 값을 제공하는 날짜/시간을 캡처하려면 다음 방법을 사용합니다.

    dt= datetime.now().strftime("%Y%m%d%H%M%S")

변경 후 성공적으로 코드를 실행할 수 있었습니다.

t-sql에 삽입할 때

실패:

select CONVERT(datetime,'2019-09-13 09:04:35.823312',21)

이 기능은 다음과 같습니다.

select CONVERT(datetime,'2019-09-13 09:04:35.823',21)

간단한 방법:

regexp = re.compile(r'\.(\d{6})')
def to_splunk_iso(dt):
    """Converts the datetime object to Splunk isoformat string."""
    # 6-digits string.
    microseconds = regexp.search(dt).group(1)
    return regexp.sub('.%d' % round(float(microseconds) / 1000), dt)

언급URL : https://stackoverflow.com/questions/1136437/inserting-a-python-datetime-datetime-object-into-mysql

반응형