2017-08-15 32 views
-1

l m新用戶python.1工作在SQL .l想要將數據從excel文件遷移到SQL。 這裏是我的代碼:將所有數據從excell遷移到sqlite?

import xlrd 
import sqlite3 

conn=sqlite3.connect("student.db") 
crs=conn.cursor() 

file_path="student.xlsx" 

file=xlrd.open_workbook(file_path) 
sheet=file.sheet_by_index(0) 
data=[[sheet.cell_value(r,c)for c in range(sheet.ncols)] for r in range(sheet.nrows)] 
for i in range(sheet.ncols): 
    colm=data[0][i] 
    crs.execute(("CREATE TABLE IF NOT EXISTS student([%s] VARCHAR(100))")%colm) 

首先,我企圖通過在Excel文件,但L使用列不能這樣做,創建表。之後,我想插入列中的每一行。可能,我在某處做錯了,但我無法弄清楚。

+0

在插入數據之前創建表格。你用這段代碼得到的錯誤信息是什麼? –

+0

excel文件有自己的列,我想用它們作爲tables.so我需要先創建它們,然後插入所有數據? – owrasa

+0

將表格視爲Excel表格。它可以是很多列。每列有一個表並不像一個好的設計 –

回答

0

爲什麼不只是將整個表添加到您的sqlite數據庫?

conn = sqlite3.connect('student.db') 
cur = conn.cursor() 

file = pd.DataFrame("student.xlsx") #assuming your import this as a PD dataframe? You may want to include the path of the file if it is not in your working directory 
'yourtablename'.to_sql("file", conn, if_exists="replace") 

conn.commit() 

'yourtablename'應該替換爲你希望給你的數據庫表的名字。然後,您可以使用下面的代碼來驗證你的表是在數據庫

con = sqlite3.connect('student.db') 
cur = con.cursor() 
cur.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;") 
cur.fetchall() 
+0

我嘗試了上面的代碼,但遇到了一個問題:「DataFrame構造函數沒有正確調用python」.Pandas DataFrame無法從excel中獲取數據。我解決了這個問題後。上面的代碼是錯誤的,我固定它,我得到了一個結果,但它不是我想要的 – owrasa

0
import xlrd 
import sqlite3 
import pandas as pd 

conn = sqlite3.connect("student.db") 
crs = conn.cursor() 

file_path = "C:/Users/LANDGIS10/PycharmProjects/sqlite/student.xlsx" 

file=xlrd.open_workbook(file_path) 
sheet = file.sheet_by_index(0) 
data = [[sheet.cell_value(r, c) for c in range(sheet.ncols)] for r in range(sheet.nrows)] 
df=pd.DataFrame(data) 
df.to_sql("student1",conn,if_exists="replace") 
conn.commit() 
crs.fetchall() 

但是,它不是什麼升要作爲列在Excel中sqlite遷移作爲行,而不是table head。這裏是結果。

"0" "ID" "NO" "NAME" "SURNAME" 
"1" "1.0" "1234.0" "Ali" "ARSA" 
"2" "2.0" "23234.0" "Mehmet" "KOT" 
"3" "3.0" "234412.0" "Adem" "SAR" 

l想要"ID" "NO" "NAME" "SURNAME"這部分作爲表頭。