programing

mariadb 커넥터(python)가 있는 Set Clause로 문자열을 삽입할 수 없습니다.

sourcejob 2022. 11. 13. 19:29
반응형

mariadb 커넥터(python)가 있는 Set Clause로 문자열을 삽입할 수 없습니다.

python-mariadb 커넥터를 사용하여 테이블에 새 행을 삽입합니다.그러기 위해서는 SET 조항을 사용하는 것이 좋습니다.어떤 이유로 ints(예: y=2)만 저장하려고 하면 작동하지만 문자열을 사용하면 다음 오류가 발생합니다.

'field list'의 알 수 없는 열 'myString'

문자열의 내용이 열 이름이라고 생각하는 것 같습니다.수정 방법(INSERT INTO로 할 수 있습니다)VALUES... 단, 여기서 SET 절을 사용합니다.)제가 알기로는, int와 str 둘 다 오류를 발생시키지 않고 저장할 수 있습니다. 감사합니다.

아래의 코드 예를 참조하십시오.

def myfunction():
    x = 1
    y ='myString'
    db = connect_db()
    cur = db.cursor()
    sql = "INSERT INTO Table SET col1={}, col2={}"
    cur.execute(sql.format(x, y))
    db.commit()
    db.close()
    return

여기에서는 MariaDB Connector를 사용하지만 다른 DB 기능에서는 작동하기 때문에 문제가 없습니다.

import mariadb

def connect_db():
    db = mariadb.connect(
        user="user",
        password="123",
        host="localhost",
        port=3306,
    database="DB"
    )
db.autocommit = False
return db

삽입에 올바른 구문을 사용하지 않습니다.

sql = "INSERT INTO Table (col1,col2) values({}, {})"

그러나 기존 행을 갱신하는 경우:

sql = "UPDATE Table SET col1={}, col2={} WHERE id = {}"

아마 'where' 조항이 필요할 겁니다

해당 코드는 SQL 문을 생성합니다.

INSERT INTO Table SET col1=1, col2=myString;

이것은 잘못된 구문입니다.문자열은 따옴표로 묶어야 합니다.

INSERT INTO Table (col1, col2) VALUES (1, 'myString');
def myfunction():
    x = 1
    y ='myString'
    db = connect_db()
    cur = db.cursor()
    sql = "INSERT INTO Table (col1, COL2) VALUES ({}, '{}')"
    cur.execute(sql.format(x, y))
    db.commit()
    db.close()
    return

하지만 위는 깨지기 쉽습니다.SQL 문을 만들기 위해 문자열 빌드 메서드를 사용하지 마십시오. 매개 변수 바인딩을 사용하는 것이 훨씬 좋습니다.

def myfunction():
    x = 1
    y ='myString'
    db = connect_db()
    cur = db.cursor()
    sql = "INSERT INTO Table (col1, col2) VALUES (?, ?)"
    cur.execute(sql, (x, y))
    db.commit()
    db.close()
    return

MariaDB 커넥터의 메뉴얼에서는, 이러한 점에 대해 설명합니다.

데이터 취득

초기 코드가 준비되면 데이터 작업을 시작할 수 있습니다.가장 먼저 해야 할 일은 데이터베이스에서 정보를 가져오는 것입니다.다음은 직원 데이터베이스에 대한 쿼리 코드입니다.

cur.execute(
    "SELECT first_name,last_name FROM employees WHERE first_name=?", 
    (some_name,)) 

MariaDB Connector/Python은 준비된 문장을 사용하여 태플의 값을 삭제하고 물음표(?) 위치에 삽입합니다.이는 사용자가 제공한 정보를 사용할 때 f-string 또는 형식 지정자를 통해 삽입하는 것보다 안전합니다.

쿼리 결과는 커서 개체의 목록에 저장됩니다.결과를 보려면 커서 위로 루프하십시오.

데이터 추가

INSERT 문과 같은 execute() 메서드를 사용하여 테이블에 행을 추가할 수 있습니다.

cursor.execute(
    "INSERT INTO employees (first_name,last_name) VALUES (?, ?)", 
    (first_name, last_name))

언급URL : https://stackoverflow.com/questions/68367706/cannot-insert-strings-with-set-clause-with-mariadb-connector-python

반응형