2015-07-20 51 views
0

如何在sqlite3中將字典項目作爲字段創建表格?從字典中的字段的新表?

我不能簡單地手動定義每個字段,因爲我有很多不同大小的字典。有沒有辦法做到這一點?

下面是我想出迄今:

import sqlite3 

DICT = { 'field 1': 'TEXT', 
      'field 2': 'TEXT', 
      'field 3': 'INT', 
      'field 4': 'TEXT' 
      'field x': '???' 
      } 

def create_table(DICT): 

    with sqlite3.connect("data.db") as connection: 
     cursor = connection.cursor() 

     # should instead iterate over the dictionary and create a field for each entry 
     cursor.execute("""CREATE TABLE table_name 
         (dict_key_x, DICT_VALUE_X)""") 

     connection.close() 

任何想法都歡迎。謝謝! :)

+1

這不只是字符串插值? –

回答

2

你當然可以做的正是這個通過建立一個字符串列表,並使用',\n' .join

DICT = {'field 1': 'TEXT', 
     'field 2': 'TEXT', 
     'field 3': 'INT', 
     'field 4': 'TEXT' 
     'field x': '???'} 

columns = "(" + ",\n".join(["{} {}".format(k,v) for k,v in DICT.items()]) + ")" 
# looks like: 
# # """(field 1 TEXT, 
# # field 2 TEXT, 
# # field 3 INT, 
# # field 4 TEXT, 
# # field x ???)""" 

with sqlite.connect('data.db') as connection: 
    cursor = connections.cursor() 
    cursor.execute("CREATE TABLE table_name\n" + columns) 
# you don't have to close the connection if you're using a with statement 
+0

謝謝!它在我將列格式更改爲'columns =「(」+「,」.join(「{} {}」)後生效。格式(k,v)for k,v in DICT.items())+「)」 」。 這將產生以下的sqlite3命令: ' 「CREATE TABLE TABLE_NAME(場1 TEXT,字段2文本等)」' 你的建議返回一個錯誤,因爲格式是這樣的: 「「CREATE TABLE TABLE_NAME(字段1,文本),(字段2,文本)等)「' – St4rb0y

+0

@ St4rb0y編輯,以反映這些變化。由於我不得不手動構建原始的SQL查詢,所以它已經超越了一切 - 我不記得語法! sqlalchemy是你的朋友:D –