我使用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编码和转义,但没有结果。
1条答案
按热度按时间holgip5t1#
由于您将Fornitori_idFornitori定义为
NOT NULL
,因此需要为列提供一个值,因为如果可以使用auto_increment,则0不是一部分,或者-1字符串