python - 将行数据从csv导入postgresql时不能使用字符串
问题描述
作为练习的一部分,我必须每秒从 csv 中插入一行到我的 postgres 数据库中。只要我的行都不包含字符串,一切正常。我想知道如何在将变量添加到我的 INSERT 语句时只让我的字符串有 ' ' 。
with open(file_path, newline='') as csvfile:
reader = csv.reader(csvfile)
next(csvfile)
for row in reader:
print(row)
cursor.execute("INSERT INTO %s (%s) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (tbl_name, cols, row[0], row[1], row[2], row[3], row[4],row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15]))
time.sleep(1)
提前致谢
解决方案
您永远不应该构建包含值作为完整字符串 (*) 的查询,而是使用参数化查询
cursor.execute("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
% (tbl_name, cols), row[:15]))
但是有些引擎不喜欢?
,在这种情况下,你可以使用%s
:
cursor.execute("INSERT INTO %s (%s) VALUES (%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s)"
% (tbl_name, cols), row[:15]))
这种模式已被弃用多年,因为它是SQL 注入攻击的原因......
推荐阅读
- python - pip 升级:“python -m pip install --upgrade”说已经是最新的(18.0),“pip --version”说(10.0.1)
- macos - Maven:无法解析以下工件。在我的 Mac 上将朋友的 .m2 文件夹放在哪里?
- html - 无法将“小”标签与“标签”标签内联
- php - PHP 和正则表达式:如何使用 unicode 单词(包括带有 ' 的缩写)拆分字符串?
- c++ - 物理向量构造函数,幅度和单位向量函数不起作用c ++
- python - Python shell 下的 Wiringpi
- php - 如何在子functions.php中覆盖父functions.php
- java - Java导入包理解
- java - mvn 未被识别为内部或外部命令
- gitlab-ci - 使用 msdeploy 部署时使用的 dll grpc_csharp_ext.x64.dll