programing

Python으로 NULL 데이터를 MySQL 데이터베이스에 삽입하려면 어떻게 해야 하나요?

goodsources 2022. 9. 11. 20:05
반응형

Python으로 NULL 데이터를 MySQL 데이터베이스에 삽입하려면 어떻게 해야 하나요?

Python 스크립트에서 MySQL로 데이터를 삽입할 때 이상한 오류가 발생합니다.기본적으로 삽입하는 변수가 공백인 것과 관련이 있습니다.MySQL은 공백 변수를 좋아하지 않는 것으로 알고 있습니다만, 다른 방법으로 변경해서 삽입문을 사용할 수 있습니까?

정상적으로 사용할 수 있습니다.IF스테이트먼트가 공백일 경우 0으로 설정되지만 나중에 MySQL에서 수행할 데이터 분석 중 일부가 잘못될 수 있습니다.변환하는 방법이 있나요?NULL아니면 MySQL이 받아 들여도 아무것도 추가하지 않는 건가요?

mysqldb를 사용하는 경우 및cursor.execute(), 값을 전달합니다.None,것은 아니다."NULL":

value = None
cursor.execute("INSERT INTO table (`column1`) VALUES (%s)", (value,))

해답은 이쪽

col1이 char, col2가 int일 경우 트릭은 다음과 같습니다.

insert into table (col1, col2) values (%s, %s) % ("'{}'".format(val1) if val1 else "NULL", val2 if val2 else "NULL");

%s에 를 추가할 필요가 없습니다.sql에 값을 전달하기 전에 처리될 수 있습니다.

이 방법은 예를 들어 sqlalchemy 세션을 사용하여 sql을 실행할 때 작동합니다.session.execute(text(sql))

ps: sql은 아직 테스트되지 않았습니다.

Python에서 SQL 문에서 매개 변수를 사용하는 방법에 대해 간단히 설명합니다.이 항목에 대한 RealPython 문서 - Python을 사용한 SQL 주입 공격 방지 항목을 참조하십시오.다음은 TowardsDataScience.com의 또 다른 유용한 기사입니다. "A Simple Approach To Templated SQL Query in Python"입니다.이것들은 같은 None/NULL 문제에 도움이 되었습니다.

또한 VALUES의 INSERT 쿼리에 직접 "NULL"(따옴표 없음)을 입력하면 SQL Server DB에서 적절하게 해석됩니다.변환 문제가 발생하는 것은 조건부로 NULL 또는 문자열 보간을 통한 값을 추가해야 하는 경우뿐입니다.

예:

cursor.execute("SELECT admin FROM users WHERE username = %s'", (username, ));

cursor.execute("SELECT admin FROM users WHERE username = %(username)s", {'username': username});

업데이트: 이 Stack Overflow에 대한 논의는 제가 하려는 일에 더 부합하며 다른 사람에게 도움이 될 수 있습니다.

예:

import pypyodbc
myData = [
    (1, 'foo'),
    (2, None),
    (3, 'bar'),
]
connStr = """
DSN=myDb_SQLEXPRESS;
"""
cnxn = pypyodbc.connect(connStr)
crsr = cnxn.cursor()
sql = """
INSERT INTO myTable VALUES (?, ?)
"""
for dataRow in myData:
    print(dataRow)
    crsr.execute(sql, dataRow)
cnxn.commit()
crsr.close()
cnxn.close()

변수를 다음과 같은 문자열과 동일하게 설정하는 것은 어떨까요?'no price'나중에 숫자를 계산하고 싶을 때 이걸 걸러내면 돼?

filter(lambda x: x != 'no price',list_of_data_from_database)

공백 여부를 빠르게 확인하고 공백일 경우 NULL로 설정합니다.

if(!variable_to_insert)
    variable_to_insert = "NULL"

...다음과 같이 삽입된 변수가 삽입문의 따옴표 안에 없는지 확인합니다.

insert = "INSERT INTO table (var) VALUES (%s)" % (variable_to_insert)
...

이하와 같지 않다:

insert = "INSERT INTO table (var) VALUES ('%s')" % (variable_to_insert)
...

언급URL : https://stackoverflow.com/questions/5507948/how-can-i-insert-null-data-into-mysql-database-with-python

반응형