python sqlite3 csv 操作時相關問題總結
阿新 • • 發佈:2019-01-02
一、python sqlite3要刪除資料庫,無需一個個刪表,直接在當前目錄下找到*.db檔案刪除即可:
import os
dbName = 'testDB.db'
if (os.path.exists('./' + dbName)):
os.remove('./' + dbName)
二、python 想把結構化的資料.csv檔案直接存到sqlite3資料庫,使用python的福利pandas庫即可:
import pandas #csv匯入到sqlite中,提供路徑和表名 def csv2sqlite(self, csvPath, csvTableName): df = pandas.read_csv(csvPath) df.to_sql(csvTableName, self.conn, if_exists='append', index=False)
三、python sqlite3資料庫表中的內容存到本地.csv檔案中,例:
import sqlite3 import pandas from sqlalchemy import create_engine dbPath = './testDB.db' #sqlite3資料庫中的tableName表,匯出到csvDstPath為.csv格式,提供表名和目的路徑 def sqlite2csv(self,tableName, csvDstPath): # echo = True ,會顯示在載入資料庫所執行的SQL語句。 engine = create_engine(r'sqlite:///'+dbPath, echo=True) table = pandas.read_sql_table(table_name= tableName, con=engine) table.to_csv(csvDstPath)
四、sqlite不支援select into from 和 insert into select;select into from 和 insert into select都是用來複製表,兩者的主要區別為: select into from 要求目標表不存在,因為在插入時會自動建立。insert into select from 要求目標表存在。
SQLite不支援以上語法,替代的語句是這樣:
CREATE TABLE newtable AS SELECT * FROM oldtable
實現sqlite表的複製,其中newtable要求不提前存在,會自動建立。而oldtable可以使用帶括號的查詢語句代替(select * from xx),如:
CREATE TABLE newtable AS SELECT * FROM (select * from xx)
其中,結尾的xx可以是表名,又可以是各種條件語句(Join...),來實現sqlite按條件查詢的結果存到新的表中。
五、SQL語句中如何使用含有if....else...判斷語句
語法:
case when 條件1 then 結果1 when 條件2 then 結果2 else 結果N end
- 可以有任意多個條件,如果沒有預設的結果,最後的else也可以不寫,
select case when col1 > 1 then col2 else col3 end from XXXtable
N、配合閱讀