mysqlpython連接
『壹』 python連接Mysql資料庫問題 cursor( ) 、execute()和fetc
MySQLdb.connect是python 連接MySQL資料庫的方法,在Python中 import MySQLdb即可使用,至於connect中的參數很簡單:x0dx0ahost:MySQL伺服器名x0dx0auser:資料庫使用者x0dx0apassword:用戶登錄密碼x0dx0adb:操作的資料庫名x0dx0acharset:使用的字元集(一般是gb2312)x0dx0acursor = db.cursor() 其實就是用來獲得python執行Mysql命令的方法,也就是x0dx0a我們所說的操作游標x0dx0a下面cursor.execute則是真正執行MySQL語句,即查詢TABLE_PARAMS表的數據。x0dx0a至於fetchall()則是接收全部的返回結果行 row就是在python中定義的一個變數,用來接收返回結果行的每行數據。同樣後面的r也是一個變數,用來接收row中的每個字元,如果寫成C的形式就更好理解了x0dx0afor(string row = '' row<= cursor.fetchall(): row++)x0dx0a for(char r = '' r<= row; r++)x0dx0aprintf("%c", r);x0dx0a大致就是這么個意思!
『貳』 鐢≒ython榪炴帴MySQL鐨勫嚑縐嶆柟寮忚﹁В_python
榪欑瘒鏂囩珷涓昏佷粙緇嶄簡鐢 Python 榪炴帴 MySQL 鐨勫嚑縐嶆柟寮忥紝澶у跺彲浠ユ牴鎹瀹為檯鎯呭喌閫夋嫨鍚堢悊鐨勮繛鎺ユ柟寮,闇瑕佺殑鏈嬪弸鍙浠ュ弬鑰冧笅
灝界″緢澶 NoSQL 鏁版嵁搴撹繎鍑犲勾澶ф斁寮傚僵錛屼絾鏄鍍 MySQL 榪欐牱鐨勫叧緋誨瀷鏁版嵁搴撲緷鐒舵槸浜掕仈緗戠殑涓繪祦鏁版嵁搴撲箣涓錛屾瘡涓瀛 Python 鐨勯兘鏈夊繀瑕佸﹀ソ涓闂ㄦ暟鎹搴擄紝涓嶇′綘鏄鍋氭暟鎹鍒嗘瀽錛岃繕鏄緗戠粶鐖鉶錛學eb 寮鍙戙佷害鎴栨槸鏈哄櫒瀛︿範錛屼綘閮界諱笉寮瑕佸拰鏁版嵁搴撴墦浜ら亾錛岃 MySQL 鍙堟槸鏈嫻佽岀殑涓縐嶆暟鎹搴擄紝榪欑瘒鏂囩珷浠嬬粛 Python 鎿嶄綔 MySQL 鐨勫嚑縐嶆柟寮忥紝浣犲彲浠ュ湪瀹為檯寮鍙戣繃紼嬩腑鏍規嵁瀹為檯鎯呭喌鍚堢悊閫夋嫨銆
1銆丮ySQL-python
MySQL-python 鍙堝彨 MySQLdb錛屾槸 Python 榪炴帴 MySQL 鏈嫻佽岀殑涓涓椹卞姩錛屽緢澶氭嗘灦閮戒篃鏄鍩轟簬姝ゅ簱榪涜屽紑鍙戱紝閬楁喚鐨勬槸瀹冨彧鏀鎸 Python2.x錛岃屼笖瀹夎呯殑鏃跺欐湁寰堝氬墠緗鏉′歡錛屽洜涓哄畠鏄鍩轟簬C寮鍙戠殑搴擄紝鍦 Windows 騫沖彴瀹夎呴潪甯鎬笉鍙嬪ソ錛岀粡甯稿嚭鐜板け璐ョ殑鎯呭喌錛岀幇鍦ㄥ熀鏈涓嶆帹鑽愪嬌鐢錛屽彇浠g殑鏄瀹冪殑琛嶇敓鐗堟湰銆
# 鍓嶇疆鏉′歡
sudo apt-get install python-dev libmysqlclient-dev # Ubuntu
sudo yum install python-devel mysql-devel # Red Hat / CentOS
# 瀹夎
pip install MySQL-pythonWindows 鐩存帴閫氳繃涓嬭澆 exe 鏂囦歡瀹夎咃紝鍏浼楀彿鍥炲嶃寃in銆嶈幏鍙栦笅杞介摼鎺
#!/usr/bin/python
import MySQLdb
db = MySQLdb.connect(
host="localhost", # 涓繪満鍚
user="john", # 鐢ㄦ埛鍚
passwd="megajonhy", # 瀵嗙爜
db="jonhydb") # 鏁版嵁搴撳悕縐
# 鏌ヨ㈠墠錛屽繀欏誨厛鑾峰彇娓告爣
cur = db.cursor()
# 鎵ц岀殑閮芥槸鍘熺敓SQL璇鍙
cur.execute("SELECT * FROM YOUR_TABLE_NAME")
for row in cur.fetchall():
print(row[0])
db.close()2銆乵ysqlclient
鐢變簬 MySQL-python 騫翠箙澶變慨錛屽悗鏉ュ嚭鐜頒簡瀹冪殑 Fork 鐗堟湰 mysqlclient錛屽畬鍏ㄥ吋瀹 MySQLdb錛屽悓鏃舵敮鎸 Python3.x錛屾槸 Django ORM鐨勪緷璧栧伐鍏鳳紝濡傛灉浣犳兂浣跨敤鍘熺敓 SQL 鏉ユ搷浣滄暟鎹搴擄紝閭d箞鎺ㄨ崘姝ら┍鍔ㄣ傚畨瑁呮柟寮忓拰 MySQLdb 鏄涓鏍風殑錛學indows 鍙浠ュ湪 https://www.lfd.uci.e/~gohlke/pythonlibs/#mysqlclient 緗戠珯鎵懼埌 瀵瑰簲鐗堟湰鐨 whl 鍖呬笅杞藉畨瑁呫
# 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 mysqlclient3銆丳yMySQL
PyMySQL 鏄綰 Python 瀹炵幇鐨勯┍鍔錛岄熷害涓婃瘮涓嶄笂 MySQLdb錛屾渶澶х殑鐗圭偣鍙鑳藉氨鏄瀹冪殑瀹夎呮柟寮忔病閭d箞綣佺悙錛屽悓鏃朵篃鍏煎 MySQL-python
pip install PyMySQL
# 涓轟簡鍏煎筸ysqldb錛屽彧闇瑕佸姞鍏
pymysql.install_as_MySQLdb()涓涓渚嬪瓙
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd="xxx", db='mysql')
cur = conn.cursor()
cur.execute("SELECT Host,User FROM user")
for r in cur:
print(r)
cur.close()
conn.close()4銆乸eewee
鍐欏師鐢 SQL 鐨勮繃紼嬮潪甯哥箒鐞愶紝浠g爜閲嶅嶏紝娌℃湁闈㈠悜瀵硅薄鎬濈淮錛岀戶鑰岃癁鐢熶簡寰堝氬皝瑁 wrapper 鍖呭拰 ORM 妗嗘灦錛孫RM 鏄 Python 瀵硅薄涓庢暟鎹搴撳叧緋昏〃鐨勪竴縐嶆槧灝勫叧緋伙紝鏈変簡 ORM 浣犱笉鍐嶉渶瑕佸啓 SQL 璇鍙ャ傛彁楂樹簡鍐欎唬鐮佺殑閫熷害錛屽悓鏃跺吋瀹瑰氱嶆暟鎹搴撶郴緇燂紝濡俿qlite, mysql銆乸ostgresql錛屼粯鍑虹殑浠d環鍙鑳藉氨鏄鎬ц兘涓婄殑涓浜涙崯澶便傚傛灉浣犲 Django 鑷甯︾殑 ORM 鐔熸倝鐨勮瘽錛岄偅涔 peewee鐨勫︿範鎴愭湰鍑犱箮涓洪浂銆傚畠鏄 Python 涓鏄鏈嫻佽岀殑 ORM 妗嗘灦銆
pip install peewee
涓涓渚嬪瓙
import peewee
from peewee import *
db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')
class Book(peewee.Model):
author = peewee.CharField()
title = peewee.TextField()
class Meta:
database = db
Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
print(book.title)瀹樻柟鏂囨。錛歨ttp://docs.peewee-orm.com/en/latest/peewee/installation.html
5銆丼QLAlchemy
濡傛灉鎯蟲壘涓縐嶆棦鏀鎸佸師鐢 SQL錛屽張鏀鎸 ORM 鐨勫伐鍏鳳紝閭d箞 SQLAlchemy 鏄鏈濂界殑閫夋嫨錛屽畠闈炲父鎺ヨ繎 Java 涓鐨 Hibernate 妗嗘灦銆
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資料庫
1、和資料庫建立連接
2、執行sql語句,接收返回值
3、關閉資料庫連接
1、MySQL資料庫要用MySQLdb模塊,但Python用來鏈接MySQL的第三方庫MySQLdb不支持Python3.x
特別說明:我在我的電腦上實驗時,我的python是2.7.2版本,安裝對應版本的MySQLdb之後直接可以運行,並與資料庫連接成功,所以如果大家也像我一樣順利的話,下面的就不需要看了,直接跳過,看第2點如何執行sql語句即可!如果安裝之後出現異常,可以參考一下下面的解決辦法。
連接的關鍵是安裝MySQLdb模塊要下載與Python相對應的版本:
下載好後安裝,它會自動檢測到計算機Python的安裝路徑,並自動填寫模塊解壓路徑(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\)。
但解壓完成後並不能使用,還要修改MySQLdb模塊下的一些文件:
①.在MySQLdb目錄下(我的是:D:\ProgramFiles\ActivePython 2.6.6.17\Lib\site-packages\MySQLdb)找到__init__.py:
注釋第34、35行的from setsimport ImmutableSet、class DBAPISet(ImmutableSet):,在後面添加class DBAPISet(frozenset):
# from sets import ImmutableSet
# class DBAPISet(ImmutableSet):
class DBAPISet(frozenset):
②.打開converters.py:
注釋第37行的from sets import BaseSet, Set,將第45行的return Set([ i for i in s.split(',') ifi ])中的Set改為set;同樣將第129行的Set: Set2Str,中的Set改為set(不要修改Set2Str),到這里就修改完畢了
2.建立資料庫連接
import MySQLdb
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")
比較常用的參數包括
host: 連接的資料庫伺服器主機名,默認為本地主機(localhost)。
user:資料庫登陸名.默認是當前用戶.
passwd:資料庫登陸的秘密.默認為空.
db:要使用的資料庫名.沒有默認值.
port:MySQL服務使用的TCP埠.默認是3306.
conn連接有兩個重要的方法commit【提交新增和修改】,rollback【撤銷新增或修改】
3、執行資料庫操作
n=cursor.execute(sql,param)
我們要使用連接對象獲得一個cursor對象,接下來,我們會使用cursor提供的方法來進行工作.
這些方法包括兩大類:1.執行命令,2.接收返回值
cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單挑sql語句,但是重復執行參數列表裡的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一行移動value條.
下面的代碼是一個完整的例子.
#使用sql語句,這里要接收的參數都用%s佔位符.要注意的是,無論你要插入的數據是什麼類型,佔位符永遠都要用%s
sql="insert into cdinfo values(%s,%s,%s,%s,%s)"
#param應該為tuple或者list
param=(title,singer,imgurl,url,alpha)
#執行,如果成功,n的值為1
n=cursor.execute(sql,param)
#再來執行一個查詢的操作
cursor.execute("select * from cdinfo")
#我們使用了fetchall這個方法.這樣,cds里保存的將會是查詢返回的全部結果.每條結果都是一個tuple類型的數據,這些tuple組成了一個tuple
cds=cursor.fetchall()
#因為是tuple,所以可以這樣使用結果集
print cds[0][3]
#或者直接顯示出來,看看結果集的真實樣子
print cds
#如果需要批量的插入數據,就這樣做
sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"
#每個值的集合為一個tuple,整個參數集組成一個tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))
#使用executemany方法來批量的插入數據.這真是一個很酷的方法!
n=cursor.executemany(sql,param)
需要注意的是(或者說是我感到奇怪的是),在執行完插入或刪除或修改操作後,需要調用一下conn.commit()方法進行提交.這樣,數據才會真正保存在資料庫中.我不清楚是否是我的mysql設置問題,總之,今天我在一開始使用的時候,如果不用commit,那數據就不會保留在資料庫中,但是,數據確實在資料庫呆過.因為自動編號進行了累積,而且返回的受影響的行數並不為0.
4、關閉資料庫連接
需要分別的關閉指針對象和連接對象.他們有名字相同的方法
cursor.close()
conn.close()
5、
5 編碼(防止亂碼)
需要注意的點:
1 Python文件設置編碼 utf-8 (文件前面加上 #encoding=utf-8)
2 MySQL資料庫charset=utf-8
3 Python連接MySQL是加上參數 charset=utf8
4 設置Python的默認編碼為 utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf-8
import sys
import MySQLdb
reload(sys)
sys.setdefaultencoding('utf-8')
db=MySQLdb.connect(user='root',charset='utf8')
註:MySQL的配置文件設置也必須配置成utf8
6.模塊功能演示
#!/usr/bin/python
import MySQLdb
Con= MySQLdb.connect(host='localhost',user='root',passwd='root',db='abc')
cursor =con.cursor()
sql ="select * from myt"
cursor.execute(sql)
row=cursor.fetchone()
print row
cursor.close()
con.close()
執行以下SQL語句獲取返回值:
//獲取連接的游標
cursor=conn.cursor()
//查詢
sql = "select * from 【table】"
//新增
sql = "insert into 【table】(欄位,欄位) values(值,值)"
//修改
sql = "update 【table】 set 欄位 =『值』where 條件 "
//刪除
sql = "delete from 【table】where 條件"
cursor.execute(sql)
返回值
cur.execute('select * from tables')
其返回值為SQL語句得到的行數,如:2L,表示2行。
然後,可以從該對象的fetchone或fetchall方法得到行信息。
獲取行信息
指針對象的fetchone()方法,是每次得到一行的tuple返回值:
引用
>>> row=cur.fetchone()
>>> print row
('user1', '', 1000L, 1000L, '/home/FTP/user1','')
指針對象的fetchall()方法,可取出指針結果集中的所有行,返回的結果集一個元組(tuples):
引用
>>> cur.scroll(0,'absolute')
>>> row=cur.fetchall()
>>> print row
(('user1', '', 1000L, 1000L, '/home/FTP/user1',''), ('user2', '', 1000L, 1000L,'/home/FTP/user2', None))
移動指針
當使用fetchone()方法是,指針是會發生移動的。所以,若不重置指針,那麼使用fetchall的信息將只會包含指針後面的行內容。
手動移動指針使用:
cur.scroll(int,parm)
含義為:
引用
int:移動的行數,整數;在相對模式下,正數向下移動,負值表示向上移動。
parm:移動的模式,默認是relative,相對模式;可接受absoulte,絕對模式。
修改數據
修改數據,包括插入、更新、刪除。它們都是使用指針對象的execute()方法執行:
cur.execute("insert into table (row1, row2) values ('111', '222')")
cur.execute("update table set row1 = 'test' where row2 = 'row2' ")
cur.execute("delete from table where row1 = 'row1' ")
因單引號「'」用於SQL語句中的標識,所以,python中的字元串需使用雙引號括住。
此外,也可以使用python的「格式化字元串」寫法,簡化命令,例如:
cur.execute("update table set row1 = '%s' where row2 = '%s' "%('value1','value2'))
※請注意,'%s'的單引號是SQL語句的間隔符,'value1'的單引號是python的字元串間隔符,其含義是不同的。是否需要間隔符,以及使用雙引號還是單引號作為間隔,需根據其含義決定。例如,還有:
cur.execute("update FTPUSERS set passwd=%s where userid='%s' "%("md5('123')",'user2'))
這里,paswd=%s是因SQL的md5()函數是不需要單引號間隔的;"md5('123')"是python的字元串中含有單引號,所以用雙引號括住。
提交修改
一般情況下,MySQLdb模塊會自動提交修改。但我們在更新數據後,手動運行一次:
conn.commit()
關閉資料庫連接
需要分別的關閉指針對象和連接對象.他們有名字相同的方法
cursor.close()
conn.close()
『肆』 python3.4怎麼連接mysql pymysql連接mysql資料庫
1、python安裝目錄設定為d:/python34
2、pymysql安裝方法為:解壓下載的文件,在cmd中運行: python setup.py install。
檢驗安裝安裝是否成功的方法:import pymysql 。 如果不報錯 說明安裝成功。
3、mysql安裝目錄為D:/phpStudy/MySQL。為避免更多配置問題,可在啟動phpstudy後,將其設為系統服務
4、基本操作:
(1)導入pymysql: import pymysql
(2)連接資料庫:
conn=pymysql.connect(host='localhost',user='root',passwd='root',db='ere',charset='utf8')
務必注意各等號前面的內容!charset參數可避免中文亂碼
(3)獲取操作游標:cur=conn.cursor()
(4)執行sql語句,插入記錄:sta=cur.execute("insert 語句") 執行成功後sta值為1。更新、刪除語句與此類似。
(5)執行sql語句,查詢記錄:cur.execute("select語句") 執行成功後cur變數中保存了查詢結果記錄集,然後再用循環列印結果:
for each in cur:
print(each[1].decode('utf-8')) # each[1] 表示當前游標所在行的的第2列值,如果是中文則需要處理編碼