python-對於mysql數據庫的操做

python操做mysql數據庫java

問題:DDL,DCL,DML的區別?python

語言與框架:jdbc/odbc操做數據庫mysql

   java(ibatis/hibernate/jpa)操做數據庫sql

客戶端工具:navicat for mysql數據庫

 

步驟:oracle

1.鏈接上mysql框架

命令:mysql -u用戶名 -p密碼 -P端口 -hip地址 數據庫名稱工具

舉例:mysql -uroot -proot -P3306 -h127.0.0.1 mysql性能

2.建立數據名稱測試

命令:create database 數據庫名稱

舉例:create database mydb

3.切換數據庫

命令:use 數據庫名稱

舉例:use mydb

4.建立表

命令:create table 表名(字段1名稱 類型和長度 修飾符 是否能夠爲空,

     字段2名稱 類型和長度 修飾符 是否能夠爲空)

舉例:create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null)

 

5.插入表

命令:insert into 表名 values(字段1,字段2,字段N)

舉例:insert into userInfo values(1,'張三',20,'男','','北京');

insert into userInfo values(2,'李四',21,'女','上海');

6.查詢表

命令:select *或者列名 from 表名 where 列名1=xxx and/or 列名2=xxx

舉例:select * from userInfo;

 

7.Python操做mysql數據庫

ipython+mysqlDBData.dll

python+MySQLdb,好比oracle(CX_oracle)

  1)通常理論上操做流程

    begin---創建鏈接(connection)-》操做數據(增/刪/改查)-》獲取結果

 -》關閉鏈接---end

  2)實際操做流程

    begin---創建鏈接(connection)-》遊標-》操做數據(增/刪/改查)-》獲取結果-》

 -》提交事務-》關閉遊標-》關閉鏈接---end

  3)前提準備,須要安裝MySQLDB

  4)練習:使用python向userInfo表中插入一行數據

 

數據庫數據預製腳本

mysql -uroot -proot -P3306 -h127.0.0.1 mysql

create database mydb;

use mydb;

create table userInfo(id int primary key not null,userName varchar(10) not null,userAge int not null,userSex varchar(10) not null,userAddress varchar(100) not null);

insert into userInfo values(1,'張三',20,'男','北京');

代碼示例:

import MySQLdb



#begin---創建鏈接(connection)-》遊標-》操做數據(增/刪/改查)-》獲取結果-》

#    -》提交事務-》關閉遊標-》關閉鏈接---end



#插入並查詢全部結果

def select():

    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")

    curson = conn.cursor()

    result =  curson.execute("select * from userInfo")

    print "result: ",result

    curson.close()

    conn.close()

if __name__ == '__main__':

    select()

 

8.python與mysql能解決什麼問題?

  1) 功能測試-----模擬業務數據

  2)自動化測試----自動化用例的數據預製

  3)性能測試----大量數據(<百萬級),若是千萬級數據推薦使用load

  4)其餘---測試樁開發、程序數據開發

 

9.插入和查詢

  插入:支持兩種方式

   1)單條插入  execute("insert into userInfo values(5,'測試人員2',25,'女','北京')"),也可使用模板插入,例如:

      cursor.execute("insert into userInfo values(%s,%s,%s,%s,%s)",(7,'測試人員4',27,'女','北京'))

   2) 多條插入,須要使用佔位符模板,經過元組列表來實現,例如:

   模板語句:insertSql2 = insert into userInfo values(%s,%s,%s,%s,%s)

   舉例:executemany(insertSql2,元組列表),例如: executemany(insertSql2,[(8,'測試人員5',28,'女','北京'),(9,'測試人員6',29,'女','北京'),(10,'測試人員7',30,'女','北京')])

  查詢:查詢當前遊標指定的一行,查詢全部行,查詢當前遊標如下多少行

 1)查詢當前遊標的一行,cursor.fetchone()

 2) 查詢全部行,基於當前遊標來講 ,cursor.fetchall()

 3)查詢當前遊標如下的行數,cursor.fetchman(3) #好比3行

  返回值是一個元組,多個是一個元組內包含元組,

  遊標是從0開始,數據取完後,遊標的值等於數據總行,後面獲取的值爲None

10.修改和刪除

   刪除:delete from userInfo where id = 10

   修改:單條,多條修改

 1)單條:經過普通的sql語句進行修改,例如execute("update userInfo set userAge=100  where id = 1")

     經過佔位符的方式進行傳值:execute("update userInfo set userAge=%s  where id = %s",(100,2))

 2)多條:經過佔位符,一次性操做多條:

    executemany("update userInfo set userAge=%s  where id = %s",[(100,3),(100,4),(100,5)])

11.事物性

   

def testTransaction():

    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")

    cursor = conn.cursor()

    try:

        sql1 = "insert into userInfo values(11,'測試人員8',31,'女','北京')"

        sql2 = "insert into userInfo values(10,'測試人員9',32,'女','北京')"

        result1 =  cursor.execute(sql1)

        result2 =  cursor.execute(sql2)

    except Exception,e:

        print str(e)

        conn.rollback()

    conn.commit()

    cursor.close()

    conn.close()

 

mysql事務自動提交的問題:

1.在mysql的系統配置文件my.ini文件中的[mysqld]下面加入autocommit =0

2.重啓mysql服務,登陸後事務的狀態爲off,經過show variables like '%commit%';查詢以下:

  autocommit | OFF

3.若是事務仍是沒有生效,多是表建立時所用的存儲引擎出現問題,引擎以下:

  MyISAM效率更高,但不支持事務,不支持外鍵。----若是事務一開始被關閉,建立的表的引擎是這個,,不支持

                                             自動提交事務

  InnoDB效率略低,支持事務和外鍵。-----能夠支持提交事務,須要把表的引擎修改過來,以下

4.修改表的存儲引擎

show create table userInfo; 查看當前表所在的引擎:ENGINE=MyISAM DEFAULT CHARSET=utf8

ALTER TABLE userInfo ENGINE=InnoDB  修改當前表的引擎

# encoding=utf-8
import MySQLdb

#begin---創建鏈接(connection)-》遊標-》操做數據(增/刪/改查)-》獲取結果-》
#  -》關閉遊標-》關閉鏈接---end

def getConn_cursor():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    return conn,cursor;
#插入並查詢全部結果
def insert():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    #例如:insert into userInfo values(1,'張三',20,'男','北京');
    #單條插入
    insertSql="insert into userInfo values(5,'測試人員2',25,'女','北京')"
    insertSql2="insert into userInfo values(%s,%s,%s,%s,%s)"
    # insertResult2 = cursor.execute(insertSql2,(7,'測試人員4',27,'女','北京'))
    #多條插入
    insertResult2 = cursor.executemany(insertSql2,[(8,'測試人員5',28,'','北京'),(9,'測試人員6',29,'','北京'),(10,'測試人員7',30,'','北京')])
    print insertResult2
    conn.commit()
    cursor.close()
    conn.close()
def select():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    result =  cursor.execute("select * from userInfo")
    print "rownumber1",cursor.rownumber
    print cursor.fetchone()
    print "rownumber2",cursor.rownumber
    print cursor.fetchone()
    print "rownumber3",cursor.rownumber
    print cursor.fetchmany(2)
    print "rownumber4",cursor.rownumber
    print cursor.fetchall()
    print "rownumber5",cursor.rownumber
    print cursor.fetchone()
    print "rownumber6",cursor.rownumber
    print "result: ",result
    print cursor.fetchone()
    print "rownumber7",cursor.rownumber
    print "result: ",result

    cursor.close()
    conn.close()
def delete():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    result =  cursor.execute("delete  from userInfo where id = 8")
    print "result: ",result
    conn.commit()
    cursor.close()
    conn.close()
#修改
def update():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    result =  cursor.execute("update userInfo set userAge=100  where id = 1")
    sql = "update userInfo set userAge=%s  where id = %s"
    result =  cursor.execute(sql,(101,2))
    print "result: ",result
    results =  cursor.executemany(sql,[(100,3),(100,4),(100,5)])
    print "results: ",results
    conn.commit()
    cursor.close()
    conn.close()

def testTransaction():
    conn = MySQLdb.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="mydb",charset="utf8")
    cursor = conn.cursor()
    try:
        sql1 = "insert into userInfo values(13,'測試人員8',31,'女','北京')"
        sql2 = "insert into userInfo values(10,'測試人員9',32,'女','北京')"
        result1 =  cursor.execute(sql1)
        result2 =  cursor.execute(sql2)
    except Exception,e:
        print str(e)
        conn.rollback()
    conn.commit()
    cursor.close()
    conn.close()

if __name__ == '__main__':
    # insert()
    #select()
    # delete()
    # select()
    testTransaction()
相關文章
相關標籤/搜索