2013-06-26 41 views
-2

我想知道如何使用sql讀取csv文件。我想用group by和其他csv文件一起。我將如何去python的這個。如何使用sql讀取csv

例如:

select * from csvfile.csv where name LIKE 'name%' 
+2

sql?蟒蛇?這是什麼?你手邊有什麼具體問題? – rantanplan

+0

我想用sql來查詢一個csv文件。 select * from csvfile.csv其中名稱LIKE'name%' – Luke101

+0

SQL用於查詢數據庫而不是文本文件。首先在您選擇的數據庫中創建您的模式/表,然後使用python加載數據庫表中的csv值。最後你用SQL進行查詢。 – rantanplan

回答

2

SQL代碼由數據庫引擎執行。 Python不直接理解或執行SQL語句。

儘管有些SQL數據庫將數據存儲在類似csv的文件中,但幾乎所有的數據都使用更復雜的文件結構。因此,您需要將每個csv文件導入到SQL數據庫引擎中的單獨表中。然後,您可以使用Python連接到SQL引擎並將其發送給SQL語句(如SELECT)。該引擎將執行SQL,從其數據文件中提取結果,並將它們返回給您的Python程序。

最常見的輕量級引擎是SQLite。

-1

您可以使用PHP腳本輕鬆查詢SQL數據庫。 PHP運行的是服務器端,因此所有的代碼都必須位於Web服務器上(即使用數據庫)。你可以做一個函數來連接到這樣的數據庫:

$con= mysql_connect($hostname, $username, $password) 
    or die("An error has occured"); 

然後使用$con完成其他任務,如通過數據循環和創建表,甚至添加行和列到現有的表。

編輯:我注意到你說.CSV文件。您可以將CSV文件上載到SQL數據庫中,並從中創建一個表。如果您使用的控制面板服務,如phpMyAdmin的,你可以簡單地導入CSV文件導入到你的數據庫是這樣的:

PHPMyAdmin screenshot

如果你正在尋找一個免費的虛擬主機來測試你的SQL和PHP文件上,退房x10託管。

+0

這個問題是關於Python,而不是PHP。問題中沒有任何跡象表明Web服務器以任何方式參與。用戶沒有運行數據庫,而是csv文件。另外,我確信PHP提供了參數化查詢,所以如果這是一個關於從用PHP編寫的Web服務器查詢MySQL的問題,那麼關於SQL注入的部分是不正確的(假設您仔細編碼)。另外,數據庫服務器不需要駐留在Web服務器上。 –

1

littletable是我編寫的用於處理對象列表的Python模塊,就好像它們是數據庫表一樣,但是使用類似關係的API,而不是實際的SQL選擇語句。 littletable中的表格可以輕鬆讀取和寫入CSV文件。我特別喜歡的一個特性是每個來自littletable表的查詢都會返回一個新的表,因此您不必爲Table和RecordSet學習不同的接口。表格可以像列表一樣迭代,但也可以選擇,索引,連接和旋轉 - 請參閱the opening page of the docs

# print a particular customer name 
# (unique indexes will return a single item; non-unique 
# indexes will return a Table of all matching items) 
print customers.by.id["0030"].name 
print len(customers.by.zipcode["12345"]) 

# print all items sold by the pound 
for item in catalog.query(unitofmeas="LB"): 
    print item.sku, item.descr 

# print all items that cost more than 10 
for item in catalog.where(lambda o : o.unitprice>10): 
    print item.sku, item.descr, item.unitprice 

# join tables to create queryable wishlists collection 
wishlists = customers.join_on("id") + wishitems.join_on("custid") + catalog.join_on("sku") 

# print all wishlist items with price > 10 
bigticketitems = wishlists().where(lambda ob : ob.unitprice > 10) 
for item in bigticketitems: 
    print item 

表的列是從添加到表中的對象的屬性推斷出來的。 namedtuples也是很好的,還有一個叫做DataObject的特殊的不可變類型,也是在littletable中定義的。

littletable需要一點時間適應,但聽起來你已經在考慮沿着類似的路線。