1. 程式人生 > >python sqlite3 csv 操作時相關問題總結

python sqlite3 csv 操作時相關問題總結

一、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、配合閱讀