1.创建外键

# 创建room表
mysql> create table rooms(id int primary key not null,title varchar());
Query OK, rows affected (0.01 sec) #创建学生表
mysql> create table stu(
-> id int primary key auto_increment not null,
-> name varchar(),
-> roomid int); #添加外键
mysql> alter table stu add constraint stu_room foreign key(roomid) references rooms(id); #添加数据
mysql> insert into stu values(,'郭靖',);
ERROR (): 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(,'聚义堂');

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'\u5c0f\u7c73', '\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'\u5c0f\u90ed', '\x01', datetime.datetime(1999, 9, 9, 0, 0), '\x00'), (2L, u'\u817e\u65ed', '\x01', datetime.datetime(1990, 2, 2, 0, 0), '\x00'), (3L, u'\u7f51\u6613', '\x01', None, '\x00'), (4L, u'\u5c0f\u7c73', '\x01', None, '\x00'), (6L, u'\u9177\u72d7', '\x00', datetime.datetime(2017, 2, 13, 0, 0), '\x01'), (7L, u'QQ', '\x01', None, '\x00'), (8L, u'\u817e\u8baf\u4e91', '\x01', None, '\x00'), (10L, u'jack', '\x01', None, '\x00'), (11L, u'\u5fae\u535a', '\x01', None, '\x00'), (12L, u'\u5fae\u4fe1', '\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 )

9 与python2交互的更多相关文章

  1. python2.7入门---文件I/O&简单用户交互

        这篇文章开始之前,我们先来看下python中的输出方法.最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写 ...

  2. Centos启动Cassandra交互模式失败:No appropriate python interpreter found

    在CentOS6.5安装好Cassandra后,启动交互模式: bin/sqlsh 192.168.10.154 时,报错 No appropriate python interpreter foun ...

  3. Python2.7.12开发环境构建(自动补全)

    一.安装readline-devel包 Python的编译安装依赖于这个包 yum -y install readline-devel 二.安装Python2.7.12 Python官方网站(到此处下 ...

  4. Python2.4-原理之函数

    此节来自于<Python学习手册第四版>第四部分 一.函数基础 函数的作用在每个编程语言中都是大同小异的,,这个表是函数的相关语句和表达式. 1.编写函数,a.def是可执行代码,pyth ...

  5. Python2.6-原理之类和oop(下)

    来自<python学习手册第四版>第六部分 五.运算符重载(29章) 这部分深入介绍更多的细节并看一些常用的重载方法,虽然不会展示每种可用的运算符重载方法,但是这里给出的代码也足够覆盖py ...

  6. Python2.x和3.x主要差异总结

    本文部分转载自http://my.oschina.net/chihz/blog/123437,部分来自自身修改 开始使用Python之后就到处宣扬Python如何如何好,宣传工作的一大重要诀窍就是做对 ...

  7. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  8. Python2和Python3在windows下共存

    Python2.7 和 Python3不兼容,两种环境可能都会用到.ubuntu14.04中已经默认安装了这两个版本,在shell中输入python会自动进入Python2.7的交互环境,输入Pyth ...

  9. 4.python中的用户交互

    学习完如何写'hello world'之后,我们还是不太满意,因为这样代码就写死了,以后运行的时候都只打印一局固定的话而已. 但是,我想在程序运行后,自己手动输入内容怎么办,此时就要学习如何使用用户交 ...

随机推荐

  1. [原创]Debian9 安装配置MariaDB

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

  2. Azure 进阶攻略 | 电脑跑分你会,但虚拟机存储性能跑分的正确姿势你造吗?

    想学生时代,小编最爱做的就是研究电脑硬件,然后给自己.朋友和童鞋装机.装好后呢?当然要第一时间跑分了!各种跑分软件运行一遍,不断优化,不断测试.终于得到一个满意成绩,截图分享到网上显摆一下.当年为啥就 ...

  3. Python3爬虫04(其他例子,如处理获取网页的内容)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import osimport reimport requestsfrom bs4 import Navigab ...

  4. oracle11g在CentOS6.9上启动脚本

    #!/bin/bash# chkconfig:2345 99 10# description: Startup Script for oracle Database# /etc/init.d/orac ...

  5. java 中的Number类 Character类 String类 StringBuffer类 StringBuilder类

    1. Number类 Java语言为每一个内置数据类型提供了对应的包装类.所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类.这种由编 ...

  6. IOS 通过 代码 自定义cell(Cell的高度不一致)(优化性能)

    创建cell的步骤 1.新建一个继承自UITabelViewCell的类 2.重写 initWithStyle:ReuseIdentifier: 方法 添加所有需要显示的子控件(不需要设置子控件的数据 ...

  7. 线程池,多线程,线程异步,同步和死锁,Lock接口

    线程池 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源.线程 ...

  8. C#程序设计入门经典之C#的基本语法

    C#代码的外观和操作方式与C++和Java非常类似.初看起来,其语法可能比较混乱,不像书面英语和其他语言.但是,在C#编程中,使用的样式是比较清晰的,不用花太多的力气就可以编写出可读性很强的代码. 与 ...

  9. Vue 前端md5加密

    用户注册时将加密后的密码发送给后端存储 当登陆的时候,再将加密后的密码和数据库中加密的密码相匹配. npm: https://www.npmjs.com/package/crypto-browseri ...

  10. 解决 div或者a标签的高度比里面的img高度多的 问题

    今天做练习遇到一个问题,分享一下解决办法: 在编写html中的一个放置图片时,代码如下: <div class="nrtp"> <div class=" ...