mysqldb示例代碼,MySQLDBA

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:46
下一篇 2024-11-27 05:46

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29

發表回復

登錄後才能評論