使用db文件填充MySQL表

时间:2012-01-20 16:28:45

标签: python mysql

我有一个xx.db文件,我用密钥访问,将密钥打印到屏幕上进行检查。有很多级别的键,我在这里显示顶级。

    for filename in filenames:
        with contextlib.closing(shelve.open(filename, flag = "w")) as data:     
prdata = data['all'].keys()

打印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是一种从文本文件将数据加载到数据库的快速方法。由于数据库中有很多数据,如果我可以先跳过制作文本文件会更快。

编辑: 试过这个,提供语法错误“你的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']
    ]
  

表示文件名中的文件名:       使用contextlib.closing(shelve.open(filename,flag =“w”))作为数据:
          prdata = data ['all']。keys()

     

cursor.execute(“”“LOAD DATA INFILE prdata INTO TABLE table2            字段被''终止            “”“)

更新:决定使用INSERT INTO table2(类,名称)VALUE(%s,%s) 工作正常

2 个答案:

答案 0 :(得分:1)

创建连接时,不要忘记添加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

答案 1 :(得分:0)

你也可以从python加载:

cursor.executemany(
      """INSERT INTO table2 (class, name)
      VALUES (%s, %s)""",
      [
      ("class1", "name1" ),
      ("class2", "name2" ),
      ("class3", "name3" )
      ] )

docs http://mysql-python.sourceforge.net/MySQLdb.html