Python 在加载数据填充中使用外部变量
我有以下表格结构:Python 在加载数据填充中使用外部变量,python,csv,Python,Csv,我有以下表格结构: date_sourced sha1 vsdt trendx notes 以及我的csv结构:sha1、vsdt、trendx、notes 如何在我的日期中插入变量值? 我试过这个: var = "2018-1-10" query = "LOAD DATA INFILE %s INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s,
date_sourced
sha1
vsdt
trendx
notes
以及我的csv结构:sha1、vsdt、trendx、notes
如何在我的日期中插入变量值?
我试过这个:
var = "2018-1-10"
query = "LOAD DATA INFILE %s INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s,sha1, @var1, trendx,notes) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query, (path,var))
但给了我一个错误:
ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''2018-1-10',sha1, @var1, trendx,notes) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LE' at line 1
加载数据填充是否接受外部变量?例如,我有这两个变量
import csv
import mysql.connector
path = 'C:\\Users\\trendMICRO\\Desktop\\OJT\\updated_test.csv'
print "CSV importing to database"
mydb = mysql.connector.connect(user='root', password='',
host='localhost',
database='jeremy_db')
cursor = mydb.cursor()
var = "apple"
query = "LOAD DATA INFILE %s INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s, @var1, person) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query, (path))
mydb.commit()
如何在我的查询中应用它,将'path/to/rb'
替换为我的变量path
和我的变量var=“apple”
设置的水果的值
这个答案假设您使用的是MySQLdb模块,如果您使用的是不同的驱动程序,答案可能会有所不同
要添加值,我们希望使用参数化查询,如下所示:
var = "apple"
path = "C:\\apple.txt"
query = "LOAD DATA INFILE %s INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s, @var1, person) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query, (path, var))
connection.commit()
存储在元组中的参数作为cursor.execute()
的第二个参数,将替换查询字符串中出现的%s
的值
不幸的是,这将不起作用,因为path
不会用作列值,并且根据:
参数占位符只能用于插入列值。他们
不能用于SQL的其他部分,例如表名,
声明等
因此,我们需要做一件可怕的事情,用文件名手工编写查询字符串如果允许将用户输入传递到变量(如path
),则这是不安全的
我们仍然可以像以前一样为var
的值使用一个参数
var = "apple"
path = "C:\\apple.txt"
query = "LOAD DATA INFILE '" + path + "' "
query += "INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s, @var1, person) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query, (var,))
connection.commit()
什么是查询?光标从哪里来?我使用导入mysql。connector@JeremyAdriandeVera请仔细检查我的编辑。请注意,要声明一个只包含一个值的元组,您需要说类似于my\u tuple=(var1,)
而不是my\u tuple=(var1)
的话,但是如何在我的日期中插入值呢?如果我的csv中没有这个值,请查看我的编辑,我只需要一步就可以完成这一步
var = "apple"
path = "C:\\apple.txt"
query = "LOAD DATA INFILE '" + path + "' "
query += "INTO TABLE jeremy_table_test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (%s, @var1, person) SET vsdt = TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM @var1))"
cursor.execute(query, (var,))
connection.commit()