• 9 与python2交互


    1.创建外键

    # 创建room表
    mysql> create table rooms(id int primary key not null,title varchar(10));
    Query OK, 0 rows affected (0.01 sec)
    
    
    #创建学生表
    mysql> create table stu(
        -> id int primary key auto_increment not null,
        -> name varchar(10),
        -> roomid int);
    
    
    #添加外键
    mysql> alter table stu add constraint stu_room foreign key(roomid) references rooms(id); 
    
    
    #添加数据
    mysql> insert into stu values(0,'郭靖',314);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`py31`.`stu`, CONSTRAINT `stu_room` FOREIGN KEY (`roomid`) REFERENCES `rooms` (`id`))
    
    
    mysql> insert into rooms values(314,'聚义堂');

    2. python2安装引入模块

    python@ubuntu:~$ sudo apt-get install python-mysql   #包名错误
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树       
    正在读取状态信息... 完成       
    E: 无法定位软件包 python-mysql
    #安装mysql模块
    python@ubuntu:~$ sudo apt-get install python-mysqldb
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树       
    正在读取状态信息... 完成       
    python-mysqldb 已经是最新版 (1.3.7-1build2)。
    下列软件包是自动安装的并且现在不需要了:
      linux-headers-4.4.0-22 linux-headers-4.4.0-22-generic linux-image-4.4.0-22-generic
      linux-image-extra-4.4.0-22-generic
    使用'sudo apt autoremove'来卸载它(它们)。
    升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 395 个软件包未被升级。
    • 在文件中引入模块
    import Mysqldb

    3.交互类型

      (1)Connection对象

    • 用于建立与数据库的连接
    • 创建对象:调用connect()方法
    conn=connect(参数列表)
    • 参数host:连接的mysql主机,如果本机是'localhost'
    • 参数port:连接的mysql主机的端口,默认是3306
    • 参数db:数据库的名称
    • 参数user:连接的用户名
    • 参数password:连接的密码
    • 参数charset:通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码

      对象的方法

    • close()关闭连接
    • commit()事务,所以需要提交才会生效
    • rollback()事务,放弃之前的操作
    • cursor()返回Cursor对象,用于执行sql语句并获得结果

      (2)Cursor对象

    • 执行sql语句
    • 创建对象:调用Connection对象的cursor()方法
    cursor1=conn.cursor()

      对象的方法

    • close()关闭
    • execute(operation [, parameters ])执行语句,返回受影响的行数
    • fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
    • next()执行查询语句时,获取当前行的下一行
    • fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
    • scroll(value[,mode])将行指针移动到某个位置
      • mode表示移动的方式
      • mode的默认值为relative,表示基于当前行移动到value,value为正则向下移动,value为负则向上移动
      • mode的值为absolute,表示基于第一条数据的位置,第一条数据的位置为0

      对象的属性

    • rowcount只读属性,表示最近一次execute()执行后受影响的行数
    • connection获得当前连接对象

    4.增删改查

    (1)增加

    # -*- coding :utf-8 -*-
    
    from MySQLdb import *            #导入包
    
    try:
        conn = connect(host="localhost", port=3306, user="root", passwd="mysql", db="py31", charset="utf8")                #Connection对象
        cursor1 = conn.cursor()                                                                                            #Cursor对象
    
        sql = 'insert into students(name) values("alex")'            #sql语句
        cursor1.execute(sql)                                         #执行
    
        conn.commit()               #提交
    
        cursor1.close()           
        conn.close()                #关闭
    except Exception as e:
        print(e.message)
    | 13 | alex      |       | NULL                |          |
    +----+-----------+--------+---------------------+----------+

    (2)修改数据

        sql = 'update students set name="jack" where id=10'

    (3)删除数据

       sql = 'delete from students where id=9'

    5.sql语句参数化

    用户输入:a'or 1=1 or'
    分号会影响sql语句
    select * from students where name=@name

       (1)参数化

    # -*- coding:utf-8 -*-
    
    from MySQLdb import *
    
    try:
        conn = connect(host="localhost", port=3306, user="root", passwd="mysql", db="py31", charset="utf8")
        cursor1 = conn.cursor()
    
        name = raw_input("请输入名字:")
        p_name = [name]
    
        #sql = 'insert into students(name) values(%s)'%p_name
        #cursor1.execute()
        cursor1.execute('insert into students(name) values(%s)',p_name)
    
        conn.commit()
    
        cursor1.close()
        conn.close()
        print("----ok---")
    
    except Exception as e:
        print(e.message)
    | 15 | 'lala'haha |       | NULL                |          |
    +----+------------+--------+---------------------+----------+

      (2) 列表作为参数

    # -*- coding:utf-8 -*-
    
    from MySQLdb import *
    
    try:
        name = raw_input("请输入名字:")
        conn = connect(host="localhost", port=3306, user="root", passwd="mysql", db="py31", charset="utf8")
        cursor1 = conn.cursor()
    
    
        sql = 'insert into students(name) values(%s)'
    
        cursor1.execute(sql,[name])
        conn.commit()
    
        cursor1.close()
        conn.close()
        print("----ok---")
    
    except Exception as e:
        print(e.message)

    6.查询

      (1)查询一条学生信息

    # -*- coding:utf-8 -*-
    
    from MySQLdb import *
    
    try:
        #name = raw_input("请输入名字:")
        conn = connect(host="localhost", port=3306, user="root", passwd="mysql", db="py31", charset="utf8")
        cursor1 = conn.cursor()
    
        #sql = 'insert into students(name) values("alex")'
        #sql = 'update students set name="jack" where id=10'
        #sql = 'delete from students where id=9'
    
        #sql = 'insert into students(name) values(%s)'
        #cursor1.execute(sql,[name])
    
        sql = 'select * from students where id=4'
        cursor1.execute(sql)
    
        result = cursor1.fetchone()
        print(result)
    
        cursor1.close()
        conn.close()
        print("----ok---")
    
    except Exception as e:
        print(e.message)
    (4L, u'u5c0fu7c73', 'x01', None, 'x00')
    ----ok---

    (2)查询多行数据

    # -*- coding:utf-8 -*-
    
    from MySQLdb import *
    
    try:
        #name = raw_input("请输入名字:")
        conn = connect(host="localhost", port=3306, user="root", passwd="mysql", db="py31", charset="utf8")
        cursor1 = conn.cursor()
    
        #sql = 'insert into students(name) values("alex")'
        #sql = 'update students set name="jack" where id=10'
        #sql = 'delete from students where id=9'
    
        #sql = 'insert into students(name) values(%s)'
        #cursor1.execute(sql,[name])
    
        sql = 'select * from students'
        cursor1.execute(sql)
    
        result = cursor1.fetchall()
        print(result)
    
        cursor1.close()
        conn.close()
        print("----ok---")
    
    except Exception as e:
        print(e.message)
    ((1L, u'u5c0fu90ed', 'x01', datetime.datetime(1999, 9, 9, 0, 0), 'x00'), (2L, u'u817eu65ed', 'x01', datetime.datetime(1990, 2, 2, 0, 0), 'x00'), (3L, u'u7f51u6613', 'x01', None, 'x00'), (4L, u'u5c0fu7c73', 'x01', None, 'x00'), (6L, u'u9177u72d7', 'x00', datetime.datetime(2017, 2, 13, 0, 0), 'x01'), (7L, u'QQ', 'x01', None, 'x00'), (8L, u'u817eu8bafu4e91', 'x01', None, 'x00'), (10L, u'jack', 'x01', None, 'x00'), (11L, u'u5faeu535a', 'x01', None, 'x00'), (12L, u'u5faeu4fe1', 'x01', None, 'x00'), (13L, u'alex', 'x01', None, 'x00'), (14L, u'lalal', 'x01', None, 'x00'), (15L, u"'lala'haha", 'x01', None, 'x00'), (16L, u"''tae", 'x01', None, 'x00'))
    ----ok---

      (3) 格式化输出数据

       # 执行SQL语句
       cursor.execute(sql)
        # 获取所有记录列表
       results = cursor.fetchall()
        for row in results:
           fname = row[0]
           lname = row[1]
           age = row[2]
           sex = row[3]
           income = row[4]
           # 打印结果
          print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % 
                  (fname, lname, age, sex, income )
  • 相关阅读:
    [bug] 未能加载文件或程序集“SIPEPS, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
    [MongoDB]索引
    [MongoDB]Profiling性能分析
    [MongoDB]mapReduce
    tms mqtt
    mqtt介绍
    咏南中间件统一的数据序列(还原)类
    支付宝签名
    咏南中间件开始支持中间件桥接
    咏南数据序列(还原)类
  • 原文地址:https://www.cnblogs.com/venicid/p/8046128.html
Copyright © 2020-2023  润新知