本文介紹python操作數(shù)據(jù)庫的方法,并以mysql與sqlite數(shù)據(jù)庫為例,從一個csv文件中讀入數(shù)據(jù),插入到數(shù)據(jù)庫中,再將數(shù)據(jù)庫中的數(shù)據(jù)讀出,保存到另一個csv文件。
介紹
python 社區(qū)制定了操作數(shù)據(jù)庫的標準,所以,我們可以通過統(tǒng)一的接口訪問不同的數(shù)據(jù)庫,減少了我們的學(xué)習(xí)負擔(dān)。
標準主要定義了兩個對象,一個用于管理連接的Connection對象,另一個是用于執(zhí)行查詢的Cursor 對象。
Python 操作數(shù)據(jù)庫的步驟
python 操作數(shù)據(jù)庫的思路如下:
- 導(dǎo)入相應(yīng)的數(shù)據(jù)庫模塊(import sqlite3, MySQLdb)
- 連接數(shù)據(jù)庫(connect),返回一個Connection 對象
- 通過該對象的cursor()成員函數(shù)返回一個Cursor 對象
- 通過Cursor對象的execute()方法執(zhí)行SQL語句
- 如果執(zhí)行的是查詢語句,則通過Cursor 對象的fetchone()等語句獲取返回結(jié)果
- 關(guān)閉Cursor對象(close())
- 關(guān)閉Connection對象(close())
插入數(shù)據(jù)
對于sqlite 數(shù)據(jù)庫,python 自帶了sqlite3 模塊,直接導(dǎo)入即可,對于mysql
數(shù)據(jù)庫,則需要安裝第三方模塊Mysql-python 。安裝完以后,在程序中導(dǎo)入模塊即可。
#!/usr/bin/python
#-*- coding: UTF-8 -*-
import csv
def main():
DATABASE="sqlite3"
#open databases
if DATABASE == "sqlite3":
import sqlite3 as db
conn = db.connect("test")
strInsert = "insert into stocks values(?, ?, ?)"
else:
import MySQLdb as db
#conn = db.connect(host="localhost", user="root", passwd="passwd", db="test")
conn = db.connect(host="localhost", db="test", read_default_file="~/.my.cnf")
strInsert = "insert into stocks values(%s, %s, %s)"
#get cursor object
cur = conn.cursor()
#read CSV file
f = open("stock_data")
stocks = []
for r in csv.reader(f):
stocks.append(r)
#create databses
cur.execute("create table stocks( symbol text, shares integer, price real)")
conn.commit()
#execute statements of insert
cur.executemany(strInsert, stocks)
conn.commit()
#close connection
cur.close()
conn.close()
if __name__ == '__main__':
main()
mysql數(shù)據(jù)庫有兩種連接方式(可能有很多種),一種是通過指定用戶名和密碼的方式,還有一種是指定read_default_file
參數(shù),關(guān)于.my.cnf 文件,可以參考這里。
讀取數(shù)據(jù)
下面執(zhí)行查詢語句,并將結(jié)果輸出到一個CSV文件。
#!/usr/bin/python
#-*- coding: UTF-8 -*-
import csv
def main():
DATABASE="mysql"
#open databases
if DATABASE == "sqlite3":
import sqlite3 as db
conn = db.connect("test")
else:
import MySQLdb as db
#conn = db.connect(host="localhost", user="root", passwd="passwd", db="test")
conn = db.connect(host="localhost", db="stocks", read_default_file="~/.my.cnf")
#crate cursor object
cur = conn.cursor()
f = open("output", 'w')
w = csv.writer(f)
#read data
cur.execute("select * from stocks")
#write data to csv file
while True:
row = cur.fetchone()
if not row: break
w.writerow(row)
f.close()
cur.close()
conn.close()
if __name__ == '__main__':
main()
ubuntu安裝MySQL-Python出現(xiàn)mysql_config not found錯誤
在ubuntu 下安裝Mysql-Python時,可能出現(xiàn)"mysql_config not found"錯誤。提示:
EnvironmentError: mysql_config not found
Google后得知mysql_config是屬于MySQL開發(fā)用的文件,而使用apt-get安裝的MySQL是沒有這個文件的,于是在包安裝器里面尋找
sudo apt-get install libmysqld-dev
sudo apt-get install libmysqlclient-dev
這兩個包安裝后問題即可解決。
|