pythonmysqldb
㈠ 如何在Anaconda下安裝Mysqldb,操作系統為Centos linux,python 2.7
操作系統為Centos Linux,由於需要在Anaconda下Python 2.7使用Mysql,操作資料庫,所以需要安裝MySQLdb命令很簡單。如圖:
系統會自動完成MySQLdb的安裝,同時更新部分包。接下來打開Sypder,盡情書寫代碼吧。
㈡ 鐢≒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 的 MySQLDB 模塊增加 Timeout 超時功能
使用Python操作MySQL資料庫的時候常使用MySQLdb這個模塊。
今天在開發的過程發現MySQLdb.connect有些參數沒法設置。通過這個頁面我們可以看到在connect的時候,可以設置的option和client_flags和MySQL
c api相比差不少。
一個很重要的參數
MYSQL_OPT_READ_TIMEOUT沒法設置,這個參數如果不設置,極致狀況MySQL處於hang住,自動切換IP漂移,客戶端無法重連到新MySQL。
給MySQLdb加Option很簡單,只要修改_mysql.c這個把Python對象映射到MySQL操作的文件,添加參數,再加一段mysql_option即可。
下面是修改後的git diff 文件
diff --git a/_mysql.c b/_mysql.c
index d42cc54..61a9b34 100644
--- a/_mysql.c
+++ b/_mysql.c
@@ -489,9 +489,10 @@ _mysql_ConnectionObject_Initialize( "named_pipe", "init_command", "read_default_file", "read_default_group", "client_flag", "ssl",
- "local_infile",
+ "local_infile", "read_timeout",
NULL } ;
int connect_timeout = 0;
+ int read_timeout = 0;
int compress = -1, named_pipe = -1, local_infile = -1;
char *init_command=NULL,
*read_default_file=NULL,
@@ -500,7 +501,7 @@ _mysql_ConnectionObject_Initialize(
self->converter = NULL;
self->open = 0;
check_server_init(-1);
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ssssisOiiisssiOi:connect",
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ssssisOiiisssiOii:connect",
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
@@ -509,7 +510,8 @@ _mysql_ConnectionObject_Initialize(
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
- &local_infile /* DO NOT PATCH FOR RECONNECT, IDIOTS
+ &local_infile, &read_timeout
+ /* DO NOT PATCH FOR RECONNECT, IDIOTS
IF YOU DO THIS, I WILL NOT SUPPORT YOUR PACKAGES. */
)) return -1;
@@ -540,6 +542,12 @@ _mysql_ConnectionObject_Initialize(
mysql_options(&(self->connection), MYSQL_OPT_CONNECT_TIMEOUT,
(char *)&timeout);
}
+
+ if (read_timeout) {
+ unsigned int timeout = read_timeout;
+ mysql_options(&(self->connection), MYSQL_OPT_READ_TIMEOUT, (char *)&timeout);
+ }
+ if (compress != -1) {
mysql_options(&(self->connection), MYSQL_OPT_COMPRESS, 0);
client_flag |= CLIENT_COMPRESS;
代碼修改完畢,python
setup.py install 即可,如果出現mysql_config找不到的問題。你還要修改setup_posix.py文件。
OperationalError: (2013, 'Lost connection to MySQL server ring query')
>/home/hoterran/Projects/dbaas/trunk/dbtest.py(18)()
>mydb.execute_sql(conn, sql)
(Pdb)
--Return--
> /home/hoterran/Projects/dbaas/trunk/dbtest.py(18)()->None
> mydb.execute_sql(conn, sql)
(Pdb)
OperationalError: (2013, 'Lost connection to MySQL server ring query')
> (1)()->None
ps: 在_mysql.c找到一句很搞的話
/* DO NOT PATCH FOR RECONNECT, IDIOTS
IF YOU DO THIS, I WILL NOT SUPPORT YOUR PACKAGES. */
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
㈣ python鏈夊摢浜涙ā鍧 Python甯哥敤妯″潡澶у叏錛
Python鏈夊緢澶氬父鐢ㄧ殑妯″潡錛屼互涓嬫槸涓浜涘父鐢ㄦā鍧楃殑澶ц嚧鍒嗙被錛
1. 甯哥敤妯″潡錛
- math錛氭暟瀛﹁繍綆楁ā鍧
- random錛氶殢鏈烘暟鐢熸垚妯″潡
- datetime錛氭棩鏈熷拰鏃墮棿澶勭悊妯″潡
- os錛氭搷浣滅郴緇熸帴鍙fā鍧
- io錛氳緭鍏ヨ緭鍑烘ā鍧
- sys錛氱郴緇熺浉鍏蟲ā鍧
- json錛欽SON緙栫爜鍜岃В鐮佹ā鍧
- re錛氭e垯琛ㄨ揪寮忔ā鍧
- time錛氭椂闂存ā鍧
- subprocess錛氬瓙榪涚▼綆$悊妯″潡
2. 鏁版嵁鍒嗘瀽鍜岀戝﹁$畻妯″潡錛
- numpy錛氭暟鍊艱$畻妯″潡
- pandas錛氭暟鎹鍒嗘瀽妯″潡
- matplotlib錛氭暟鎹鍙瑙嗗寲妯″潡
- scipy錛氱戝﹁$畻妯″潡
- scikit-learn錛氭満鍣ㄥ︿範妯″潡
3. 緗戠粶鍜學eb寮鍙戠浉鍏蟲ā鍧楋細
- requests錛氱綉緇滆鋒眰妯″潡
- urllib錛歎RL澶勭悊妯″潡
- socket錛氱綉緇滈氫俊妯″潡
- flask錛氳交閲忕駭Web寮鍙戞嗘灦
- django錛氬叏鍔熻兘Web寮鍙戞嗘灦
4. 鏁版嵁搴撶浉鍏蟲ā鍧楋細
- sqlite3錛歋QLite鏁版嵁搴撴ā鍧
- MySQLdb錛歁ySQL鏁版嵁搴撴ā鍧
- psycopg2錛歅ostgreSQL鏁版嵁搴撴ā鍧
- pymongo錛歁ongoDB鏁版嵁搴撴ā鍧
5. GUI寮鍙戞ā鍧楋細
- tkinter錛歅ython鑷甯︾殑鍥懼艦鐣岄潰妯″潡
- PyQt錛氳法騫沖彴鐨勫浘褰㈢晫闈㈡ā鍧
- wxPython錛氬熀浜巜xWidgets鐨勫浘褰㈢晫闈㈡ā鍧
㈤ python連接MySQL資料庫實例分析
python連接MySQL資料庫實例分析
本文實例講述了python連接MySQL資料庫的方法。分享給大家供大家參考。具體實現方法如下:
import MySQLdb
conn = MySQLdb.connect(host="localhost",
user="root",
passwd="123456",
db="test")
cursor = conn.cursor()
cursor.execute("select * from hard")
res = cursor.fetchall()
for x in res:
print x
cursor.close()
conn.close()
運行結果如下:
希望本文所述對大家的python程序設計有所幫助。
㈥ 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()
㈦ python怎麼連接mysql資料庫
在 Python 語言環境下我們這樣連接資料庫。
In [1]: from mysql import connector
In [2]: cnx = connector.connect(host="172.16.192.100",port=3306,user="appuser",password="xxxxxx")
但是連接資料庫的背後發生了什麼呢?
答案
當我們通過驅動程序(mysql-connector-python,pymysql)連接 MySQL 服務端的時候,就是把連接參數傳遞給驅動程序,驅動程序再根據參數會發起到 MySQL 服務端的 TCP 連接。當 TCP 連接建立之後驅動程序與服務端之間會按特定的格式和次序交換數據包,數據包的格式和發送次序由MySQL 協議規定。MySQL 協議:https://dev.mysql.com/doc/internals/en/client-server-protocol.html整個連接的過程中 MySQL 服務端與驅動程序之間,按如下的次序發送了這些包。
MySQL 服務端向客戶端發送一個握手包,包里記錄了 MySQL-Server 的版本,默認的授權插件,密碼鹽值(auth-data)。
2. MySQL 客戶端發出 ssl 連接請求包(如果有必要的話)。
3. MySQL 客戶端發出握手包的響應包,這個包時記錄了用戶名,密碼加密後的串,客戶端屬性,等等其它信息。
4. MySQL 服務端發出響應包,這個包里記錄了登錄是否成功,如果沒有成功也會給出錯誤信息。