csv 在pandas的sql insert语句中转义子查询的结果

pn9klfpd  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(124)

我使用python和pandas在MariaDB上导入csv,isert语句需要几个子查询,下面是代码:

empdata = pd.read_csv(
    "static/files/testfile.csv",
    index_col=False, delimiter=";", on_bad_lines="skip"
)

if conn.is_connected():
    cursor = conn.cursor()
    cursor.execute("select database();")
    record = cursor.fetchone()
    # print (record)
    print("You're connected to database: ", record)
    # loop through the data frame
    for i, row in empdata.iterrows():
        # print(row)
        # here %S means string values
        sql = "INSERT INTO PRODOTTI (PROD_ATTIVO,EAN13,prod_nome,Prezzo,CAT_IVA_idCAT_IVA,Costo,Quantita,Fornitori_idFornitori,Data_ins) \
                VALUES (%s,%s,%s,%s,(select idCAT_IVA from CAT_IVA where CAT_IVA_aliquota = %s),%s,%s,(select idFornitori from Fornitori where Fornitori_nome = %s),%s)"

字符串
所有的工作正常,直到一个子答案包含一个空格,而我得到了这个错误:
(1,'3649833526','Example product',15.9,0.22,'8.94','2','example dealer','2021/01/02')在DB 1048(23000)中插入时出错:列“Fornitori_idFornitori”不能为Null
在我看来,子查询只搜索**'example',而不是'example dealer'**,所以它得到一个NULL答案,我还没有找到一种方法来转义这个字段并避免这种行为。
有人知道如何解决这个问题吗?

  • 谢谢-谢谢
    我在查询中尝试了不同的csv编码和转义,但没有结果。
holgip5t

holgip5t1#

由于您将Fornitori_idFornitori定义为NOT NULL,因此需要为列提供一个值,因为如果可以使用auto_increment,则0不是一部分,或者-1

sql = "INSERT INTO PRODOTTI (PROD_ATTIVO,EAN13,prod_nome,Prezzo,CAT_IVA_idCAT_IVA,Costo,Quantita,Fornitori_idFornitori,Data_ins) \
VALUES (%s,%s,%s,%s,COALESCE((select idCAT_IVA from CAT_IVA where CAT_IVA_aliquota = %s),0),%s,%s,COALESCE((select idFornitori from Fornitori where Fornitori_nome = REPLACE(%s, ' ','')),0),%s)"

字符串

相关问题