zoukankan      html  css  js  c++  java
  • Mysql Cookbook学习笔记第二章

    1,使用python链接mysql

    # -*- coding: utf-8 -*-
    # connect.py --连接到MySQL服务器
    import sys
    import MySQLdb
    try:
        conn = MySQLdb.connect(db = "cookbook",
                               host = "localhost",
                               user = "burness",
                               passwd = "123456")
    
        print "Connected"
    except:
        print "Cannot connect to server"
        sys.exit(1)
    
    conn.close()
    print "Disconnected"
    

    2,使用python操作过程中提示出错信息以便于调试

    # -*- coding: utf-8 -*-
    # connect.py --连接到MySQL服务器
    import sys
    import MySQLdb
    try:
        conn = MySQLdb.connect(db = "cookbook",
                               host = "localhost",
                               user = "burness",
                               passwd = "123456")
    
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to server"
        print "Error code:", e.args[0]
        print "Error message:", e.args[1]
        sys.exit(1)
    
    conn.close()
    print "Disconnected"
    

    例如:使用错误的密码:

    image

    3,编写库文件

    库文件可以简化在程序中频繁使用配置参数,以及保证一些数据的隐秘性如密码

    例如 Cookbook.py内保存有数据库连接的内容:

    # -*- coding: utf-8 -*-
    # Cookbook.py -具有通过MySQLdb模块连接MySQL的工具方法的库文件
    import MySQLdb
    
    host_name="localhost"
    db_name="cookbook"
    user_name="burness"
    password="123456"
    
    
    
    # 建立一个到cookbook数据库的连接,返回一个connection对象
    # 如果不能建立连接则抛出一个异常。
    def connect():
        return MySQLdb.connect(db=db_name,
                               host=host_name,
                               user=user_name,
                               passwd=password)
    
    

    harness.py 测试Cookbook.py

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    conn.close()
    print "Disconnected"
    

    4,发起语句并检索结果

    python 中MySQLdb使用cursor来进行execute的操作,不返回结果如update:

    expand sourceview source
    print?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
    01.import sys 
    02.import MySQLdb 
    03.import Cookbook 
    04.# 用来测试Cookbook.py 
    05.try: 
    06.    conn=Cookbook.connect() 
    07.    print "Connected"
    08.except MySQLdb.Error, e: 
    09.    print "Cannot connect to serve"
    10.    print "Error code:",e.args[0] 
    11.    print "Error message:",e.args[1] 
    12.    sys.exit(1) 
    13.# cursor=conn.cursor() 
    14.# 使用行作为命名元素 
    15.cursor = conn.cursor(MySQLdb.cursors.DictCursor) 
    16.cursor.execute("select id, name, cats from profile") 
    17.rows=cursor.fetchall() 
    18.#for row in rows: 
    19.#    print "id:%s, name: %s, cats: %s" % (row[0],row[1],row[2]) 
    20.for row in rows: 
    21.    print "id:%s, name: %s, cats: %s" % (row["id"],row["name"],row["cats"]) 
    22.print "Number of rows returned: %d" % cursor.rowcount 
    23.conn.close() 
    24.print "Disconnected"

    返回结果,如select

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    cursor=conn.cursor()
    cursor.execute("select id, name, cats from profile")
    while 1:
        row=cursor.fetchone()# fetchone用来顺序返回下一行
        if row==None:
            break
        print "id: %s, name: %s, cats: %s" %(row[0],row[1],row[2])
    print "Number of rows returned: %d" % cursor.rowcount
    conn.close()
    print "Disconnected"
    

    使用fetchall()可以一次返回整个满足条件的结果集

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    # cursor=conn.cursor()
    # 使用行作为命名元素
    cursor = conn.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute("select id, name, cats from profile")
    rows=cursor.fetchall()
    #for row in rows:
    #    print "id:%s, name: %s, cats: %s" % (row[0],row[1],row[2])
    for row in rows:
        print "id:%s, name: %s, cats: %s" % (row["id"],row["name"],row["cats"])
    print "Number of rows returned: %d" % cursor.rowcount
    conn.close()
    print "Disconnected"
    

    5,处理语句中的特殊字符和NULL值

    占位符机制和引用:

    python中可以使用格式化来进行占位符的使用

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    cursor = conn.cursor()
    # 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符
    cursor.execute("""insert into profile (name,birth,color,foods,cats)values(%s,%s,%s,%s,%s)""",("De'Mont","1973-01-12",None,"eggroll",4))
    
    print "Number of rows update: %d"%cursor.rowcount
    cursor2=conn.cursor()
    cursor2.execute("select * from profile")
    rows=cursor2.fetchall()
    for row in rows:
        print "id:%s, name: %s, cats: %s" % (row[0],row[1],row[2])
    print "Number of rows returned: %d" % cursor2.rowcount
    conn.close()
    print "Disconnected"
    

    另外一个方法是MySQLdb引用时使用literal()方法

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    # cursor=conn.cursor()
    # 使用行作为命名元素
    cursor = conn.cursor()
    # 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符
    cursor.execute("""insert into profile (name,birth,color,foods,cats)
    values(%s,%s,%s,%s,%s)"""%(conn.literal("123123123123"),conn.literal("1973-01-12"),conn.literal("123"),conn.literal("eggroll"),conn.literal(4)))
    conn.commit()# 必须要有这个才能提交,才会有保存
    print "Number of rows update: %d"%cursor.rowcount
    
    conn.close()
    print "Disconnected"
    

    在实验代码的过程中发现上一个运行后在本地mysql数据库中没有保存,google之后发现必须在完成之后运行conn.commit()才能使更改保存!!!

    6,识别结果集中的NULL值

    python程序使用None来表示结果集中的NULL,代码如下:

    import sys
    import MySQLdb
    import Cookbook
    # 用来测试Cookbook.py
    try:
        conn=Cookbook.connect()
        print "Connected"
    except MySQLdb.Error, e:
        print "Cannot connect to serve"
        print "Error code:",e.args[0]
        print "Error message:",e.args[1]
        sys.exit(1)
    # cursor=conn.cursor()
    # 使用行作为命名元素
    cursor = conn.cursor()
    # 使用占位符来与mysql交互,python中支持格式化符号用来作为占位符
    cursor.execute("select name, birth, foods from profile")
    for row in cursor.fetchall():
        row=list(row)
        for i in range(0,len(row)):
            if row[i]==None:
                row[i]="NULL"
        print "name: %s, birth: %s, food: %s"%(row[0],row[1],row[2])
    conn.close()
    print "Disconnected"
    

    7,获取连接参数的技术

    a,将参数硬编码到程序中;b,交互式请求参数;c,从命令行获取参数;d,从执行环境获取参数;e,从一个独立的文件中获取参数

    从命令行得到参数可以通过getopt.getopt,具体代码如下:

    # -*- coding: cp936 -*-
    #cmdline.py -- 说明Python中的命令行选项解析
    import sys
    import getopt
    import MySQLdb
    try:
        opts, args=getopt.getopt(sys.argv[1:],"h:p:u:",["host=","password=","user="])# h: p: u: 表示后面都带参数 如是hp:则说明h不带参数
        print opts
    
    except getopt.error,e:
        #对于错误,输出程序名以及错误信息文本
        print "%s: %s" %(sys.argv[0],e)
        sys.exit(1)
    
    host_name=password=user_name=""
    
    for opt,arg in opts:
        if opt in ("-h","--host"):
            host_name=arg
        elif opt in ("-p","--password"):
            password=arg
        elif opt in ("-u","--user"):
            user_name=arg
    #所有剩下的非选项参数都保留在args中,并可在这里做必要的处理
    try:
        conn=MySQLdb.connect(db="cookbook",host=host_name,user=user_name,passwd=password)
        print "Connected"
    except MySQLdb.Error,e:
        print "Cannot connect to server"
        print "Error:",e.args[1]
        print "Code:",e.args[0]
        sys.exit(1)
    
    conn.close()
    print "Disconnected"
    

    从选项文件获取参数

    Unix下有/etc/my.cnf,mysql安装目录的my.cnf,以及当前用户的~/.my.cnf(按系统查找顺序来),当存在多个时,最后发现的具有最高优先级而在windows下安装目录my.ini,windows根目录my.ini或者my.cnf

  • 相关阅读:
    c# winform 应用编程代码总结 5
    c# winform 应用编程代码总结 6
    C语言 如何隐藏DOS窗口
    c# winform 应用编程代码总结 13
    c# winform 应用编程代码总结 8
    c# winform 应用编程代码总结 7
    c# winform 应用编程代码总结 10
    Ext grid改变行背景颜色 和改变行字体颜色
    我的博客学习记录一箩筐(每天更新)
    New version of wxDesigner based on wxWidgets pre3.0 released
  • 原文地址:https://www.cnblogs.com/burness/p/3700282.html
Copyright © 2011-2022 走看看