用db文件填充MySQL表
我有一个叫做xx.db的文件,我通过一些键来访问它,并把这些键打印出来以便检查。这个文件里有很多层级的键,这里我只展示最上层的。
for filename in filenames:
with contextlib.closing(shelve.open(filename, flag = "w")) as data:
prdata = data['all'].keys()
print prdata 我在Python中创建了一个这样的表:
tbl= """CREATE TABLE IF NOT EXISTS table2 (
`class` varchar(30) default NULL,
`name` varchar(120) default NULL,
)"""
cursor.execute(tbl)
我想把从这个.db文件中获取的第一组数据加载到我创建的MySQLdb表里。我该怎么做呢?我需要先从这个db文件创建一个文本文件吗?我听说使用LOAD DATA INFILE可以快速地从文本文件加载数据到数据库。因为db里有很多数据,如果能跳过先制作文本文件的步骤,那会更快。
编辑: 我试过这样做,但出现了语法错误:“你的SQL语法有错误;请检查与你的MySQL服务器版本相对应的手册,以获取正确的语法,错误发生在'prdata INTO TABLE table2 \n\t FIELDS TERMINATED BY ' '附近。”我对语法文档理解得不太正确,也不知道怎么在Python中把它包裹起来。
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
for filename in filenames: with contextlib.closing(shelve.open(filename, flag = "w")) as data:
prdata = data['all'].keys()cursor.execute("""LOAD DATA INFILE prdata INTO TABLE table2 FIELDS TERMINATED BY ' ' """)
更新:决定使用INSERT INTO table2 (class,name) VALUE (%s,%s),这样可以正常工作。
2 个回答
你也可以通过Python来加载数据:
cursor.executemany(
"""INSERT INTO table2 (class, name)
VALUES (%s, %s)""",
[
("class1", "name1" ),
("class2", "name2" ),
("class3", "name3" )
] )
当你建立连接的时候,别忘了加上 local_infile 这个参数。
connection = MySQLdb.connect(host="localhost", user="appuser", passwd="",
db="test", local_infile = 1)
否则你会看到这个错误:
ERROR 1148 (42000): The used command is not allowed with this MySQL version