Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在加载数据填充中使用外部变量_Python_Csv - Fatal编程技术网

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()