9 与python2交互
Posted 不要被骄傲遮蔽了双眼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\'\\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交互的主要内容,如果未能解决你的问题,请参考以下文章