【问题标题】:Populate MySQL table with db file使用 db 文件填充 MySQL 表
【发布时间】:2012-02-15 04:59:50
【问题描述】:

我有一个 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 (class,name) VALUE (%s,%s) 工作正常

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    您也可以从 python 进行加载:

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

    文档http://mysql-python.sourceforge.net/MySQLdb.html

    【讨论】:

    • 当然,但实际数据位于 .db 文件中。所以我希望从中拉出来,而不是手动插入“class1”、“name1”等。
    【解决方案2】:

    创建连接时,别忘了加上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
    

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多