1、MySQLdb
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、高郵ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的高郵網(wǎng)站制作公司
# 前置條件
sudo apt-get install python-dev libmysqlclient-dev # Ubuntu
sudo yum install python-devel mysql-devel # Red Hat / CentOS
# 安裝
pip install MySQL-python
Windows 直接通過(guò)下載 exe 文件安裝
#!/usr/bin/python
import MySQLdb
db = MySQLdb.connect(
host = "localhost", # 主機(jī)名
user = "root", # 用戶名
passwd = "pythontab.com", # 密碼
db = "testdb") # 數(shù)據(jù)庫(kù)名稱
# 查詢前,必須先獲取游標(biāo)
cur = db.cursor()
# 執(zhí)行的都是原生SQL語(yǔ)句
cur.execute("SELECT * FROM mytable")
for row in cur.fetchall():
print(row[0])
db.close()
2、mysqlclient
# Windows安裝
pip install some-package.whl
# linux 前置條件
sudo apt-get install python3-dev # debian / Ubuntu
sudo yum install python3-devel # Red Hat / CentOS
brew install mysql-connector-c # macOS (Homebrew)
pip install mysqlclient
3、PyMySQL
pip install PyMySQL
# 為了兼容mysqldb,只需要加入
pymysql.install_as_MySQLdb()
import pymysql
conn = pymysql.connect(host = '127.0.0.1', user = 'root', passwd = "pythontab.com", db = 'testdb')
cur = conn.cursor()
cur.execute("SELECT Host,User FROM user")
for r in cur:
print(r)
cur.close()
conn.close()
4、peewee
pip install peewee
import peewee
from peewee import *
db = MySQLDatabase('testdb', user = 'root', passwd = 'pythontab.com')
class Book(peewee.Model):
author = peewee.CharField()
title = peewee.TextField()
class Meta:
database = db
Book.create_table()
book = Book(author = "pythontab", title = 'pythontab is good website')
book.save()
for book in Book.filter(author = "pythontab"):
print(book.title)
5、SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy_declarative import Address, Base, Person
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key = True)
street_name = Column(String(250))
engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind = engine)
session = DBSession()
# Insert a Person in the person table
new_person = Person(name = 'new person')
session.add(new_person)
session.commit()
用python是非常方便的,非常方便就能備份mysql和sqlserver,
下面我們來(lái)具體看看如何用:
#coding=gbk
import os
import time
os.system("mysqldump -h192.168.0.2 -uddd -pggg xdreams E:/mysqldack/xdreams/xdreamsfdfdf.txt")
上面就成功把0.2機(jī)器上的mysql數(shù)據(jù)庫(kù)備份下來(lái),
導(dǎo)入數(shù)據(jù)庫(kù):mysql -h192.168.0.2 -uroot -psz212 -P 7659 hotelguanli G:/temp/2013-03-28-10-34-35.sql
下面是sqlserver的:
os.system("sqlcmd.exe -S 127.0.0.1,56678 -U sa -P 123456 -d 數(shù)據(jù)庫(kù)名 -b -c cmd_end -Q \"backup database 數(shù)據(jù)庫(kù)名 to disk='d:/sql.bak'\"")
看看,是不是很簡(jiǎn)單。
當(dāng)然還可以通過(guò)os.path.getsize(r"d:/sql.bak")/1024來(lái)獲取這個(gè)文件的大小,返回的是K,
備份文件還可以用時(shí)間值來(lái)命名:
如:
nowtime=time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))+""
改造上面一條:
os.system("mysqldump -h192.168.0.2 -uddd -pggg xdreams E:/mysqldack/xdreams/xdreams"+nowtime+".txt")
如果再完善一點(diǎn),就加個(gè)備份完成后發(fā)一封郵件到你郵箱里吧。
其它要注意到的一點(diǎn)就是sqlxerver和備份中,sqlserver服務(wù)器實(shí)列要支付遠(yuǎn)程連接,開(kāi)啟sql brower服務(wù)
兩個(gè)數(shù)據(jù)庫(kù)的密碼不要含有"^"這個(gè)符號(hào),因?yàn)樵赾md里好像識(shí)別不到它,轉(zhuǎn)義也不行,具體原因沒(méi)查到.
現(xiàn)在,加在windows或linux的計(jì)劃任務(wù)中去,每天執(zhí)行它,至此,大功告成.
文件的存儲(chǔ)方式
在計(jì)算機(jī)中,文件是以二進(jìn)制的方式保存在磁盤(pán)上的文本文件和二進(jìn)制文件
文本文件可以使用文本編輯軟件查看本質(zhì)上還是二進(jìn)制文件
二進(jìn)制文件保存的內(nèi)容不是給人直接閱讀的,而是提供給其她軟件使用的二進(jìn)制文件不能使用文件編輯軟件查看
文件基本操作
在計(jì)算機(jī)中要操作文件一共包含三個(gè)步驟:1.打開(kāi)文件2.讀、寫(xiě)文件
讀 將文件內(nèi)容讀入內(nèi)容寫(xiě) 將內(nèi)存內(nèi)容寫(xiě)入文件
模式描述
t文本模式 (默認(rèn))。
x寫(xiě)模式,新建一個(gè)文件,如果該文件已存在則會(huì)報(bào)錯(cuò)。
b二進(jìn)制模式。
+打開(kāi)一個(gè)文件進(jìn)行更新(可讀可寫(xiě))。
U通用換行模式(不推薦)。
r以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。
rb以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。一般用于非文本文件如圖片等。
r+打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。
rb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。一般用于非文本文件如圖片等。
w打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。
wb以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。
w+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。
wb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。
a打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
ab以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。
a+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。
ab+以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。
文件打開(kāi)模式有很多,但是我們實(shí)際用到的就只有六種。
我們總結(jié)一下主要用到的是下面六種
模式可做操作若文件不存在是否覆蓋文件原來(lái)內(nèi)容
r只讀報(bào)錯(cuò)——
r+可讀、可寫(xiě)報(bào)錯(cuò)是
w只寫(xiě)創(chuàng)建是
w+可讀、可寫(xiě)創(chuàng)建是
a只寫(xiě)創(chuàng)建否,追加寫(xiě)
a+可讀、可寫(xiě)創(chuàng)建否,追加寫(xiě)
只讀模式打開(kāi)文件——只讀(r)
文件若不存在報(bào)錯(cuò):
讀寫(xiě)模式打開(kāi)文件——讀寫(xiě)模式(r+)
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
會(huì)替換掉相同長(zhǎng)度的內(nèi)容
文件若不存在報(bào)錯(cuò):
寫(xiě)模式打開(kāi)文件——寫(xiě)模式(w)
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
這種操作會(huì)刪除原來(lái)的文件內(nèi)容,重新寫(xiě)入Python,
并且把光標(biāo)放在文件最開(kāi)始。
若文件不存在,系統(tǒng)會(huì)創(chuàng)建該文件夾并重新寫(xiě)入內(nèi)容
讀寫(xiě)模式打開(kāi)文件——讀寫(xiě)模式(w+)
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
這種操作會(huì)刪除原來(lái)的文件內(nèi)容,重新寫(xiě)入Python,
并且把光標(biāo)放在文件最開(kāi)始。
若文件不存在,系統(tǒng)會(huì)創(chuàng)建該文件夾并重新寫(xiě)入內(nèi)容
利用這個(gè)原理所以文件寫(xiě)模式(w)、讀寫(xiě)模式(w+)還可以用作刪除文件內(nèi)容。
因?yàn)樗麄冋麄€(gè)工作原理就是把文件原來(lái)的內(nèi)容刪除,然后寫(xiě)入新的內(nèi)容。
如果我們寫(xiě)入的內(nèi)容為空,那么不就是刪除文件內(nèi)容。
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
寫(xiě)模式打開(kāi)文件(追加內(nèi)容)——寫(xiě)模式(a)
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
可以看到是在原先內(nèi)容的基礎(chǔ)上在文末追加新的內(nèi)容!
若文件不存在,系統(tǒng)會(huì)創(chuàng)建新的文件夾并寫(xiě)入內(nèi)容
讀寫(xiě)模式打開(kāi)文件(追加內(nèi)容)——讀寫(xiě)模式(a)
數(shù)據(jù)寫(xiě)入之前:
數(shù)據(jù)寫(xiě)入之后:
可以看到是在原先內(nèi)容的基礎(chǔ)上在文末追加新的內(nèi)容!
若文件不存在,系統(tǒng)會(huì)創(chuàng)建新的文件夾并寫(xiě)入內(nèi)容
二進(jìn)制模式打開(kāi)文件
我們看到了在文件打開(kāi)模式中有以下模式:rb、wb……有這種帶 b 的。
什么意思呢?
就是用二進(jìn)制的方式打開(kāi)文件。
很明顯,我們出現(xiàn)了以下錯(cuò)誤:
主要原因是因?yàn)榫幋a的問(wèn)題,可能是因?yàn)?x82這個(gè)字節(jié)在gbk編碼中沒(méi)有這個(gè)字符,
可能原字符是兩個(gè)字節(jié),在gbk里被解析成了一個(gè)字節(jié),導(dǎo)致字符不存在。
這就是我們文件打開(kāi)方式需要使用二進(jìn)制讀取的原因。
文件操作
open 函數(shù)負(fù)責(zé)打開(kāi)文件,并且返回文件對(duì)象
read /write / close 三個(gè)方法都需要通過(guò)文件對(duì)象 來(lái)調(diào)用
文件和文件夾的操作
在Python中?件和?件夾的操作要借助os模塊??的相關(guān)功能,
具體步驟如下:
導(dǎo)?os模塊
使? os 模塊相關(guān)功能
1、文件重命名
2、刪除文件
3、創(chuàng)建文件夾
4、刪除文件夾
5、獲取當(dāng)前目錄
6、改變默認(rèn)目錄
7、獲取目錄列表