本文目錄一覽:
- 1、mysqldb和mysql-connector的區別
- 2、mysqldb可以非同步執行嗎
- 3、python連接mysql出錯 AttributeError: ‘Connection’ object has no attribute ‘cursorclass’
- 4、python怎麼連接mysql資料庫
- 5、python mysqldb 同時多少個鏈接
- 6、python中mysqldb的connect怎麼驗證是否連接成功
mysqldb和mysql-connector的區別
連接資料庫的代碼如下
import mysql.connectorconfig={‘host’:’127.0.0.1′,#默認127.0.0.1 ‘user’:’root’, ‘password’:’123456′, ‘port’:3306 ,#默認即為3306 ‘database’:’test’, ‘charset’:’utf8’#默認即為utf8 }try: cnn=mysql.connector.connect(**config)except mysql.connector.Error as e: print(‘connect fails!{}’.format(e))
連接方法上和MySQLdb模塊略有不同。MySQLdb使用的是=號,這裡使用的是 : 號。
2、創建表
下面我們根據上面新建的一個資料庫連接創建一張名為student的表:
sql_create_table=’CREATE TABLE `student`(`id` int(10) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,`age` int(3) DEFAULT NULL,PRIMARY KEY (`id`))ENGINE=MyISAM DEFAULT CHARSET=utf8’cursor=cnn.cursor()try: cursor.execute(sql_create_table)except mysql.connector.Error as e: print(‘create table orange fails!{}’.format(e))
3、插入數據
插入數據的語法上和MySQLdb上基本上是一樣的:
cursor=cnn.cursor()try: ‘第一種:直接字元串插入方式’ sql_insert1=”insert into student (name, age) values (‘orange’, 20)” cursor.execute(sql_insert1) ‘第二種:元組連接插入方式’ sql_insert2=”insert into student (name, age) values (%s, %s)” #此處的%s為佔位符,而不是格式化字元串,所以age用%s data=(‘shiki’,25) cursor.execute(sql_insert2,data) ‘第三種:字典連接插入方式’ sql_insert3=”insert into student (name, age) values (%(name)s, %(age)s)” data={‘name’:’mumu’,’age’:30} cursor.execute(sql_insert3,data) #如果資料庫引擎為Innodb,執行完成後需執行cnn.commit()進行事務提交except mysql.connector.Error as e: print(‘insert datas error!{}’.format(e))finally: cursor.close() cnn.close()
同樣,MySQL Connector也支持多次插入,同樣其使用的也是cursor.executemany,示例如下:
stmt=’insert into student (name, age) values (%s,%s)’data=[ (‘Lucy’,21), (‘Tom’,22), (‘Lily’,21)]cursor.executemany(stmt,data)
4、查詢操作
cursor=cnn.cursor()try: sql_query=’select id,name from student where age %s’ cursor.execute(sql_query,(21,)) for id,name in cursor: print (‘%s’s age is older than 25,and her/his id is %d’%(name,id))except mysql.connector.Error as e: print(‘query error!{}’.format(e))finally: cursor.close() cnn.close()
5、刪除操作
cursor=cnn.cursor()try: sql_delete=’delete from student where name = %(name)s and age %(age)s’ data={‘name’:’orange’,’age’:24} cursor.execute(sql_delete,data)except mysql.connector.Error as e: print(‘delete error!{}’.format(e))finally: cursor.close() cnn.close()
mysqldb可以非同步執行嗎
Asynchronous Replication Automatic failover
其原理是在一條非同步複製通道上配置多個可用複製源,當某個複製源不可用時(宕機、複製鏈路中斷),且 slave 的 IO 線程嘗試重連無效,自動根據權重選擇新的源繼續同步。
準備一個 MGR 集群和單實例,模擬複製鏈路切換,當 primary 故障,slave 自動切換到其他節點。dbdeployer deploy replication –topology=group 8.0.22 –single-primarydbdeployer deploy single 8.0.22
2. 在從機上建立指向 MGR 主節點的複製通道,
change master to master_user=’msandbox’,master_password=’msandbox’, master_host=’127.0.0.1′,master_auto_position=1,source_connection_auto_failover=1,master_port=23223,master_retry_count=6,master_connect_retry=10 for channel ‘mgr-single’;
在 master_retry_count 和 master_connect_retry 的設置上要考慮嘗試重連多久才切換複製源。
3. 在從機上配置 asynchronous connection auto failover
配置 asynchronous connection auto failover 的兩個函數:
asynchronous_connection_failover_add_source(channel-name,host,port,network-namespace,weight)
asynchronous_connection_failover_delete_source(channel-name,host,port,network-namespace)
權重值大的被優先順序選擇,可以配合MGR的選舉權重配置 asynchronous_connection_failover 的權重。當 MGR 節點切換,非同步複製也能切換到新的主節點。
SELECT asynchronous_connection_failover_add_source(‘mgr-single’,’127.0.0.1′,23223,null,100); SELECT asynchronous_connection_failover_add_source(‘mgr-single’,’127.0.0.1′,23224,null,80); SELECT asynchronous_connection_failover_add_source(‘mgr-single’,’127.0.0.1′,23225,null,50);start slave for channel ‘mgr-single’;
4. 檢查非同步複製通道是否啟用 failover。
mysql SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration; +————–+———————————+| CHANNEL_NAME | SOURCE_CONNECTION_AUTO_FAILOVER |+————–+———————————+| mgr-single | 1 |+————–+———————————+1 row in set (0.01 sec
5. 把 MGR 的 primary 節點 kill 掉,這個從節點會在嘗試幾輪重連失敗後自動切換到次權重的複製源,其日誌中會輸出切換信息。
注意:當主節點故障,一旦複製鏈路成功 failover 後,在新的複製鏈路沒有故障時,如果原主節點恢復,是不會回切的。如果當前複製鏈路發生故障,會再次選擇權重高的進行切換
python連接mysql出錯 AttributeError: ‘Connection’ object has no attribute ‘cursorclass’
你好像還有其他的代碼沒有上傳。給你個示例代碼:
# 引入 MySQLdb包
import MySQLdb
# 連接資料庫
conn = MySQLdb.connect(
host=’localhost’, # 主機名
user=’root’, # 用戶名
passwd=’12345′, # 密碼
db=’douban’, # 資料庫名
port=3306, # 埠
charset=’utf8′ # 編碼
)
# 獲取資料庫操作游標
cursor = conn.cursor()
# 寫入數據
sql = ‘insert into movie(name, score, time) values(%s, %s, %s)’
param = (‘The Shawshank Redemption’, 9.6, 1994)
n = cursor.execute(sql, param)
# 會返回執行操作的條數# 更新數據
sql = ‘update movie set name = %s where id = %s’
param = (‘The Shawshank Redemption’, 1)
n = cursor.execute(sql, param)
# 查詢數據
sql = ‘select * from movie’
n = cursor.execute(sql)
cursor.fetchall()
# 會返回所有的結果集,tuple元組型
for row in cursor.fetchall():
for r in row:
print r
# 刪除操作
sql = ‘delete from movie where id = %s’param = (1)
n = cursor.execute(sql, param)
# 最後,關閉游標
cursor.close()
# 提交事務
conn.commit()
# 關閉連接
conn.close()
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′, ’52c69e3a57331081823331c4e69d3f2e’, 1000L, 1000L, ‘/home/FTP/user1’,”)
指針對象的fetchall()方法,可取出指針結果集中的所有行,返回的結果集一個元組(tuples):
引用
cur.scroll(0,’absolute’)
row=cur.fetchall()
print row
((‘user1′, ’52c69e3a57331081823331c4e69d3f2e’, 1000L, 1000L, ‘/home/FTP/user1’,”), (‘user2’, ‘7e58d63b60197ceb55a1c487989a3720′, 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 mysqldb 同時多少個鏈接
看資料庫的配置和性能
做python的時候需要用到資料庫,於是自己重新整理了一下資料庫的知識,並且熟悉了python中MysqlDB模塊的功能和函數等介面,現在系統地來總結一下吧:
首先你要做的還是下載相應的模塊並且安裝啦,下載地址自己搜,網上有很多,安裝的話也很好辦,安裝之後python的安裝目錄下的Lib文件夾下的site-packages文件夾下的MySQLdb文件夾,這之中存放的便是該模塊的定義。準備工作做好之後我們需要在源碼中import MySQLdb
資料庫的連接:
模塊引入之後我們就需要和資料庫進行連接了,實例代碼如下:
db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
這三個關鍵參數的含義一目了然:第一個為伺服器的地址,第二個為用戶名,第三個為dbms密碼,第四個為要訪問的資料庫,其實該connect函數的參數不止這些,不過由於其有默認值而且大多數情況下不用修改,因而省略了。這裡做如下列表:
host,連接的資料庫伺服器主機名,默認為本地主機(localhost)。
user,連接資料庫的用戶名,默認為當前用戶。
passwd,連接密碼,沒有默認值。
db,連接的資料庫名,沒有默認值。
conv,將文字映射到Python類型的字典。默認為MySQLdb.converters.conversions
cursorclass,cursor()使用的種類,默認值為MySQLdb.cursors.Cursor。
compress,啟用協議壓縮功能。
named_pipe,在windows中,與一個命名管道相連接。
init_command,一旦連接建立,就為資料庫伺服器指定一條語句來運行。
read_default_file,使用指定的MySQL配置文件。
read_default_group,讀取的默認組。
unix_socket,在unix中,連接使用的套接字,默認使用TCP。
port,指定資料庫伺服器的連接埠,默認是3306
大家可能會注意到源碼中沒有用到埠號,這是因為MySQLdb的connect函數的該參數的默認值便是3306,如果你在安裝mysql的時候修改了資料庫的埠號,那麼你就需要在源碼中加上該參數的修改值了。
一,安裝mysql
如果是windows 用戶,mysql 的安裝非常簡單,直接下載安裝文件,雙擊安裝文件一步一步進行操作即可。
Linux 下的安裝可能會更加簡單,除了下載安裝包進行安裝外,一般的linux 倉庫中都會有mysql ,我們只需要通過一個命令就可以下載安裝:
Ubuntu\deepin
sudo apt-get install mysql-server
Sudo apt-get install mysql-client
centOS/redhat
yum install mysql
二,安裝MySQL-python
要想使python可以操作mysql 就需要MySQL-python驅動,它是python 操作mysql必不可少的模塊。
下載MySQL-python-1.2.5.zip 文件之後直接解壓。進入MySQL-python-1.2.5目錄:
python setup.py install
三,測試
測試非常簡單,檢查MySQLdb 模塊是否可以正常導入。
fnngj@fnngj-H24X:~/pyse$ python
Python 2.7.4 (default, Sep 26 2013, 03:20:56)
[GCC 4.7.3] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
import MySQLdb
沒有報錯提示MySQLdb模塊找不到,說明安裝OK ,下面開始使用python 操作資料庫之前,我們有必要來回顧一下mysql的基本操作:
四,mysql 的基本操作
$ mysql -u root -p (有密碼時)
$ mysql -u root (無密碼時)
mysql show databases; // 查看當前所有的資料庫
+——————–+
| Database |
+——————–+
| information_schema |
| csvt |
| csvt04 |
| mysql |
| performance_schema |
| test |
+——————–+
6 rows in set (0.18 sec)
mysql use test; //作用與test資料庫
Database changed
mysql show tables; //查看test庫下面的表
Empty set (0.00 sec)
//創建user表,name 和password 兩個欄位
mysql CREATE TABLE user (name VARCHAR(20),password VARCHAR(20)); Query OK, 0 rows affected (0.27 sec)
//向user表內插入若干條數據
mysql insert into user values(‘Tom’,’1321′);Query OK, 1 row affected (0.05 sec)
mysql insert into user values(‘Alen’,’7875′);Query OK, 1 row affected (0.08 sec)
mysql insert into user values(‘Jack’,’7455′);Query OK, 1 row affected (0.04 sec)
//查看user表的數據
mysql select * from user;+——+———-+
| name | password |
+——+———-+
| Tom | 1321 |
| Alen | 7875 |
| Jack | 7455 |
+——+———-+
3 rows in set (0.01 sec)
//刪除name 等於Jack的數據
mysql delete from user where name = ‘Jack’;Query OK, 1 rows affected (0.06 sec)
//修改name等於Alen 的password 為 1111
mysql update user set password=’1111′ where name = ‘Alen’;Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
//查看錶內容
mysql select * from user;+——–+———-+
| name | password |
+——–+———-+
| Tom | 1321 |
| Alen | 1111 |
+——–+———-+
3 rows in set (0.00 sec)
五,python 操作mysql資料庫基礎
#coding=utf-8import MySQLdb
conn= MySQLdb.connect(
host=’localhost’,
port = 3306,
user=’root’,
passwd=’123456′,
db =’test’,
)
cur = conn.cursor()#創建數據表#cur.execute(“create table student(id int ,name varchar(20),class varchar(30),age varchar(10))”)#插入一條數據#cur.execute(“insert into student values(‘2′,’Tom’,’3 year 2 class’,’9′)”)#修改查詢條件的數據#cur.execute(“update student set class=’3 year 1 class’ where name = ‘Tom'”)#刪除查詢條件的數據#cur.execute(“delete from student where age=’9′”)cur.close()
conn.commit()
conn.close()
conn = MySQLdb.connect(host=’localhost’,port = 3306,user=’root’, passwd=’123456′,db =’test’,)
Connect() 方法用於創建資料庫的連接,裡面可以指定參數:用戶名,密碼,主機等信息。
這只是連接到了資料庫,要想操作資料庫需要創建游標。
cur = conn.cursor()
通過獲取到的資料庫連接conn下的cursor()方法來創建游標。
cur.execute(“create table student(id int ,name varchar(20),class varchar(30),age varchar(10))”)
通過游標cur 操作execute()方法可以寫入純sql語句。通過execute()方法中寫如sql語句來對數據進行操作。
cur.close()
cur.close() 關閉游標
conn.commit()
conn.commit()方法在提交事物,在向資料庫插入一條數據時必須要有這個方法,否則數據不會被真正的插入。
conn.close()
Conn.close()關閉資料庫連接
六,插入數據
通過上面execute()方法中寫入純的sql語句來插入數據並不方便。如:
cur.execute(“insert into student values(‘2′,’Tom’,’3 year 2 class’,’9′)”)
我要想插入新的數據,必須要對這條語句中的值做修改。我們可以做如下修改:
#coding=utf-8import MySQLdb
conn= MySQLdb.connect(
host=’localhost’,
port = 3306,
user=’root’,
passwd=’123456′,
db =’test’,
)
cur = conn.cursor()#插入一條數據sqli=”insert into student values(%s,%s,%s,%s)”cur.execute(sqli,(‘3′,’Huhu’,’2 year 1 class’,’7′))
cur.close()
conn.commit()
conn.close()
假如要一次向數據表中插入多條值呢?
#coding=utf-8import MySQLdb
conn= MySQLdb.connect(
host=’localhost’,
port = 3306,
user=’root’,
passwd=’123456′,
db =’test’,
)
cur = conn.cursor()#一次插入多條記錄sqli=”insert into student values(%s,%s,%s,%s)”cur.executemany(sqli,[
(‘3′,’Tom’,’1 year 1 class’,’6′),
(‘3′,’Jack’,’2 year 1 class’,’7′),
(‘3′,’Yaheng’,’2 year 2 class’,’7′),
])
cur.close()
conn.commit()
conn.close()
executemany()方法可以一次插入多條值,執行單挑sql語句,但是重複執行參數列表裡的參數,返回值為受影響的行數。
七,查詢數據
也許你已經嘗試了在python中通過
cur.execute(“select * from student”)
來查詢數據表中的數據,但它並沒有把表中的數據列印出來,有些失望。
來看看這條語句獲得的是什麼
aa=cur.execute(“select * from student”)
print aa
5
它獲得的只是我們的表中有多少條數據。那怎樣才能獲得表中的數據呢?進入python shell
import MySQLdb conn = MySQLdb.connect(host=’localhost’,port = 3306,user=’root’, passwd=’123456′,db =’test’,) cur = conn.cursor() cur.execute(“select * from student”)5L
cur.fetchone()
(1L, ‘Alen’, ‘1 year 2 class’, ‘6’) cur.fetchone()
(3L, ‘Huhu’, ‘2 year 1 class’, ‘7’) cur.fetchone()
(3L, ‘Tom’, ‘1 year 1 class’, ‘6’)
…cur.scroll(0,’absolute’)
fetchone()方法可以幫助我們獲得表中的數據,可是每次執行cur.fetchone() 獲得的數據都不一樣,換句話說我沒執行一次,游標會從表中的第一條數據移動到下一條數據的位置,所以,我再次執行的時候得到的是第二條數據。
scroll(0,’absolute’) 方法可以將游標定位到表中的第一條數據。
還是沒解決我們想要的結果,如何獲得表中的多條數據並列印出來呢?
#coding=utf-8import MySQLdb
conn= MySQLdb.connect(
host=’localhost’,
port = 3306,
user=’root’,
passwd=’123456′,
db =’test’,
)
cur = conn.cursor()#獲得表中有多少條數據aa=cur.execute(“select * from student”)print aa#列印表中的多少數據info = cur.fetchmany(aa)for ii in info: print ii
cur.close()
conn.commit()
conn.close()
通過之前的print aa 我們知道當前的表中有5條數據,fetchmany()方法可以獲得多條數據,但需要指定數據的條數,通過一個for循環就可以把多條數據列印出啦!執行結果如下:
5(1L, ‘Alen’, ‘1 year 2 class’, ‘6’)
(3L, ‘Huhu’, ‘2 year 1 class’, ‘7’)
(3L, ‘Tom’, ‘1 year 1 class’, ‘6’)
(3L, ‘Jack’, ‘2 year 1 class’, ‘7’)
(3L, ‘Yaheng’, ‘2 year 2 class’, ‘7’)
[Finished in 0.1s]
python中mysqldb的connect怎麼驗證是否連接成功
代碼如下:
# -*- coding: utf-8 -*-
#mysqldb
import time, MySQLdb
#連接
conn=MySQLdb.connect(host=”localhost”,user=”root”,passwd=””,db=”test”,charset=”utf8″)cursor = conn.cursor()
#寫入
sql = “insert into user(name,created) values(%s,%s)”param = (“aaa”,int(time.time()))
n = cursor.execute(sql,param)
print n
#更新
sql = “update user set name=%s where id=3″param = (“bbb”)
n = cursor.execute(sql,param)
print n
#查詢
n = cursor.execute(“select * from user”)
for row in cursor.fetchall():
for r in row:
print r
#刪除
sql = “delete from user where name=%s”
param =(“aaa”)
n = cursor.execute(sql,param)
print n
cursor.close()
#關閉
conn.close()
複製代碼
基本的使用如上,還是很簡單的,進一步使用還沒操作,先從網上找點資料放上來,以備後續查看1.引入MySQLdb庫
import MySQLdb
2.和資料庫建立連接
conn=MySQLdb.connect(host=”localhost”,user=”root”,passwd=”sa”,db=”mytable”,charset=”utf8″)提供的connect方法用來和資料庫建立連接,接收數個參數,返回連接對象.
比較常用的參數包括
host:資料庫主機名.默認是用本地主機.
user:資料庫登陸名.默認是當前用戶.
passwd:資料庫登陸的秘密.默認為空.
db:要使用的資料庫名.沒有默認值.
port:MySQL服務使用的TCP埠.默認是3306.
charset:資料庫編碼.
更多關於參數的信息可以查這裡
然後,這個連接對象也提供了對事務操作的支持,標準的方法commit() 提交
rollback() 回滾
3.執行sql語句和接收返回值
cursor=conn.cursor()
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佔位符.要注意的是,無論你要插入的數據是什麼類型,佔位符永遠都要用%ssql=”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組成了一個tuplecds=cursor.fetchall()
#因為是tuple,所以可以這樣使用結果集
print cds[0][3]
#或者直接顯示出來,看看結果集的真實樣子
print cds
#如果需要批量的插入數據,就這樣做
sql=”insert into cdinfo values(0,%s,%s,%s,%s,%s)”#每個值的集合為一個tuple,整個參數集組成一個tuple,或者listparam=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))#使用executemany方法來批量的插入數據.這真是一個很酷的方法!
n=cursor.executemany(sql,param)
4.關閉資料庫連接
需要分別的關閉指針對象和連接對象.他們有名字相同的方法cursor.close()
conn.close()
四步完成,基本的資料庫操作就是這樣了.下面是兩個有用的連接MySQLdb用戶指南: 文檔: 編碼(防止亂碼)
需要注意的點:
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
設置 MySQL 的 my.cnf 文件,在 [client]/[mysqld]部分都設置默認的字符集(通常在/etc/mysql/my.cnf):
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186430.html