2012-01-20 48 views
0

我有一個xx.db文件,我可以通過這些鍵進行訪問,將鍵打印到屏幕上進行檢查。有很多級別的按鍵,我在這裏顯示最高級別。使用db文件填充MySQL表

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是從文本文件中將數據加載到數據庫的快速方法。由於db中有很多數據,如果我可以先跳過創建文本文件,速度會更快。

編輯: 曾經嘗試這樣做,提供了語法錯誤「您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「PRDATA INTO TABLE表2 \ 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(文件名,flag =「w」))作爲數據:
prdata = data ['all']。keys( )

cursor.execute( 「」 「LOAD DATA INFILE PRDATA INTO TABLE表2 FIELDS TERMINATED BY '' 」「」)

更新:決定與INSERT進入表2(類名稱) VALUE(%S,S) 工作正常

回答

0

你可以從蟒蛇做加載,以及:

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

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

+0

當然,但實際數據駐留在.db文件。所以我希望能夠從中獲益,而不是手動插入「class1」,「name1」等。 – Tom

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