python实例方法
在Windows平台上安装mysql模块用于Python开发
用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了32与64版本。
MySQL-python-1.2.3.win32-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
实例 1、取得 MYSQL 的版本
# -*- coding: UTF-8 -*-
#安装 MYSQL DB for python
import MySQLdb as mdb
con = None
try:
#连接 mysql 的方法: connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root','root', 'test');
#所有的查询,都在连接 con 的一个模块 cursor 上面运行的
cur = con.cursor()
#执行一个查询
cur.execute("SELECT VERSION()")
#取得上个查询的结果,是单个结果
data = cur.fetchone()
print "Database version : %s " % data
finally:
if con:
#无论如何,连接记得关闭
con.close()
实例 2、创建一个表并且插入数据
import MySQLdb as mdb
import sys
#将 con 设定为全局连接
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#获取连接的 cursor,只有获取了 cursor,我们才能进行各种操作
cur = con.cursor()
#创建一个数据表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
#以下插入了 5 条数据
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
实例 3、 python 使用 slect 获取 mysql 的数据并遍历
import MySQLdb as mdb
import sys
#连接 mysql,获取连接的对象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#仍然是,第一步要获取连接的 cursor 对象,用于执行查询
cur = con.cursor()
#类似于其他语言的 query 函数, execute 是 python 中的执行查询函数
cur.execute("SELECT * FROM Writers")
#使用 fetchall 函数,将结果集(多维元组)存入 rows 里面
rows = cur.fetchall()
#依次遍历结果集,发现每个元素,就是表中的一条记录,用一个元组来显示
for row in rows:
print row
运行结果:
(1L, ‘Jack London')
(2L, ‘Honore de Balzac')
(3L, ‘Lion Feuchtwanger')
(4L, ‘Emile Zola')
(5L, ‘Truman Capote')
上面的代码,用来将所有的结果取出,不过打印的时候是每行一个元祖打印,现在我们使用方法,取出其中的单个数据:
import MySQLdb as mdb
import sys
#获取 mysql 的链接对象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#获取执行查询的对象
cur = con.cursor()
#执行那个查询,这里用的是 select 语句
cur.execute("SELECT * FROM Writers")
#使用 cur.rowcount 获取结果集的条数
numrows = int(cur.rowcount)
#循环 numrows 次,每次取出一行数据
for i in range(numrows):
#每次取出一行,放到 row 中,这是一个元组(id,name)
row = cur.fetchone()
#直接输出两个元素
print row[0], row[1]
运行结果:
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
实例 4、使用字典 cursor 取得结果集(可以使用表字段名字访问值)
import MySQLdb as mdb
import sys
#获得 mysql 查询的链接对象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#获取连接上的字典 cursor,注意获取的方法,
#每一个 cursor 其实都是 cursor 的子类
cur = con.cursor(mdb.cursors.DictCursor)
#执行语句不变
cur.execute("SELECT * FROM Writers")
#获取数据方法不变
rows = cur.fetchall()
#遍历数据也不变(比上一个更直接一点)
for row in rows:
#这里,可以使用键值对的方法,由键名字来获取数据
print "%s %s" % (row["Id"], row["Name"])
实例 5、获取单个表的字段名和信息的方法
import MySQLdb as mdb
import sys
#获取数据库的链接对象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#获取普通的查询 cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#获取连接对象的描述信息
desc = cur.description
print 'cur.description:',desc
#打印表头,就是字段名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
#打印结果
print "%2s %3s" % row
运行结果:
cur.description: ((‘Id', 3, 1, 11, 11, 0, 0), (‘Name', 253, 17, 25, 25, 0, 1))
Id Name
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
实例 6、使用 Prepared statements 执行查询(更安全方便)
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
cur = con.cursor()
#我们看到,这里可以通过写一个可以组装的 sql 语句来进行
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Maupasant", "4"))
#使用 cur.rowcount 获取影响了多少行
print "Number of rows updated: %d" % cur.rowcount
结果:
Number of rows updated: 1
实例 7、把图片用二进制存入 MYSQL
有人喜欢把图片存入 MYSQL(这种做法貌似很少吧),我看大部分的程序,图片都是存放在服务器上的文件,数据库中存的只是图片的地址而已,不过 MYSQL 是支持把图片存入数据库的,也相应的有一个专门的字段 BLOB (Binary Large Object),即较大的二进制对象字段,请看如下程序,注意测试图片自己随便找一个,地址要正确:
首先,在数据库中创建一个表,用于存放图片:
复制代码代码如下:
CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
然后运行如下 PYTHON 代码进行:
import MySQLdb as mdb
import sys
try:
#用读文件模式打开图片
fin = open("../web.jpg")
#将文本读入 img 对象中
img = fin.read()
#关闭文件
fin.close()
except IOError, e:
#如果出错,打印错误信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
try:
#链接 mysql,获取对象
conn = mdb.connect(host='localhost',user='root',passwd='root',
db='test')
#获取执行 cursor
cursor = conn.cursor()
#直接将数据作为字符串,插入数据库
cursor.execute("INSERT INTO Images SET Data='%s'" %
mdb.escape_string(img))
#提交数据
conn.commit()
#提交之后,再关闭 cursor 和链接
cursor.close()
conn.close()
except mdb.Error, e:
#若出现异常,打印信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
实例 8、从数据库中把图片读出来
import MySQLdb as mdb
import sys
try:
#连接 mysql,获取连接的对象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#执行查询该图片字段的 SQL
cursor.execute("SELECT Data FROM Images LIMIT 1")
#使用二进制写文件的方法,打开一个图片文件,若不存在则自动创建
fout = open('image.png','wb')
#直接将数据如文件
fout.write(cursor.fetchone()[0])
#关闭写入的文件
fout.close()
#释放查询数据的资源
cursor.close()
conn.close()
except IOError, e:
#捕获 IO 的异常 ,主要是文件写入会发生错误
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
实例 9、使用 Transaction 即事务(手动提交,自动回滚)
import MySQLdb as mdb
import sys
try:
#连接 mysql,获取连接的对象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#如果某个数据库支持事务,会自动开启
#这里用的是 MYSQL,所以会自动开启事务(若是 MYISM 引擎则不会)
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Leo Tolstoy", "1"))
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Boris Pasternak", "2"))
cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
("Leonid Leonov", "3"))
#事务的特性 1、原子性的手动提交
conn.commit()
cursor.close()
conn.close()
except mdb.Error, e:
#如果出现了错误,那么可以回滚,就是上面的三条语句要么执行,要么都不执行
conn.rollback()
print "Error %d: %s" % (e.args[0],e.args[1])
结果:
1、因为不存在 writer 表( SQL 第三条语句),所以出现错误:Error 1146: Table ‘test.writer' doesn't exist
2、出现错误,出发异常处理, 3 条语句的前两条会自动变成了没有执行,结果不变
3、如果本代码放到一个 MyISAM 引擎表,前两句会执行,第三句不会;如果是 INNDB 引擎,则都不会执行。
❷ 如何获得python类的所有方法与给定的装饰
面相对象程序设计中,类方法和静态方法是经常用到的两个术语。
逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。
在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆。
而在python中,方法分为三类实例方法、类方法、静态方法。代码如下:
class Test(object):
def InstanceFun(self):
print("InstanceFun");
print(self);
@classmethod
def ClassFun(cls):
print("ClassFun");
print(cls);
@staticmethod
def StaticFun():
print("StaticFun");
t = Test();
t.InstanceFun();# 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”
Test.ClassFun(); # 输出ClassFun,打印类位置 <class '__main__.Test'>
Test.StaticFun(); # 输出StaticFun
t.StaticFun(); # 输出StaticFun
t.ClassFun(); # 输出ClassFun,打印类位置 <class '__main__.Test'>
Test.InstanceFun(); # 错误,TypeError: unbound method
instanceFun() must be called with Test instance as first argument
Test.InstanceFun(t); # 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”
t.ClassFun(Test); # 错误 classFun() takes exactly 1 argument (2 given)
可以看到,在PYTHON中,两种方法的主要区别在于参数。实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls。
静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。
所以逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是cls引用作为参数。
❸ python实例成员实例变量
1、语法:
定义:对象.变量名
调用:对象.变量名
2、说明:
(1)首次通过对象赋值为创建,再次赋值为修改
x01=wife()
wife.name="做租橡张三" 此时为创建
wife.name="李四" 此时为修改
(2)通过在构造函数__init__中创建
wife("张三",24)
print(w01.name)
(3)、每个对象存储一份,通过对象地址访问。
3、作用:描述所有对象的共有数据。
实例方法:
1、语法
定义:def方法名称(self,参数列表):
方法体
调用:对象地址.实例名称(参数)
作用:所有对象共享方法。
对象是指构造函数,方法纯旁是指形为函数。
'''
class Studons:
def __init__(self,name,xibie,nianling,fenshu):
self.name=name
self.xibie=xibie
self.nianling=nianling
self.fenshu=fenshu
def dayin(self):
print("姓名:%s,性别:%s,年龄:%d,分数:%d"%(self.name,self.xibie,self.nianling,self.fenshu))
#定义函数根据姓名查找每型拿个人的信息。
list01=[Studons("张无忌","女",2,98),
Studons("张老六","男",61,95),
Studons("三丰","男",31,95),
Studons("小丽丽","女",21,93),
]
def cha_name(name):
for item in list01:
if name==item.name:
# print(item.name,item.nianling)
item.dayin()
cha_name("小丽丽")
#2、
def fund_xus(names):
for itme in list01:
if itme.name==names:
return itme
print(fund_xus("小丽丽").name)
#查找所有女同学
def fund_nv(age):
list02 = []
for itme in list01:
if itme.xibie==age:
list02.append(itme)
return list02
ae=fund_nv("女")
for ime in ae:
ime.dayin()
#统计30岁以上的人的数量
def count_stud():
coun=0
for itme in list01:
if itme.nianling>=30:
coun+=1
return coun
print(count_stud())
#将所有学生的成绩归0
def list_0():
for itme in list01:
itme.fenshu=0
#获取列表中所有人的名字
def pen_name():
name=[]
for itme in list01:
name.append(itme.name)
return name
print(pen_name())
#查找年龄 最大的学生对象
def max_nl():
maxt=list01[0]
for itme in range(len(list01)):
if maxt.nianling<list01[itme].nianling: span=""> </list01[itme].nianling:>
maxt=list01[itme]
return maxt
max_nl().dayin()
❹ python 如何得到类的所有实例
importgc
classDog(object):
def__init__(self,name):
self.name=name
dahuang=Dog('1')
xiao=Dog('2')
forobjingc.get_objects():
ifisinstance(obj,Dog):
printobj.name
❺ python能做什么有趣的东西
python能做什么有趣的东西?下面给大家介绍35个Python实例:
1. Python3 实现图片识别
2. Python3 图片隐写术
3. 200 行 Python 代码实现 2048
4. Python实现3D建模工具
5. 使用 Python 定制词云
相关推荐:《Python教程》
6. Python3 智能裁切图片
7.微信变为聊天机器人
8. 使用 Python 解数学方程
9. 使用 Python 创建照片马赛克
10. Python 基于共现提取《釜山行》人物关系
11. Python 气象数据分析:《Python 数据分析实战》
12. NBA常规赛结果预测:利用Python进行比赛数据分析
13. Python 的循环语句和隐含波动率的计算
14. K-近邻算法实现手写数字识别系统
15. 数独游戏的 Python 实现与破解
16. 基于 Flask 与 MySQL 实现番剧推荐系
17. Python 实现英文新闻摘要自动提取
18. Python 解决哲学家就餐问题
19. Ebay 在线拍卖数据分析
20. 神经网络实现人脸识别任务
21. 使用 Python 解数学方程
22. Python3 实现火车票查询工具
23. Python 实现端口扫描器
24. Python3 实现可控制肉鸡的反向Shell
25. Python 实现 FTP 弱口令扫描器
26. 基于PyQt5 实现地图中定位相片拍摄位置
27. Python实现网站模拟登陆
28.Python实现简易局域网视频聊天工具
29. 基于 TCP 的 python 聊天程序
30. Python3基于Scapy实现DDos
31. 高德API + Python 解决租房问题
32. 基于 Flask 与 RethinkDB 实现TODO List
33. Python3 实现简单的 Web 服务器
34. Python 实现 Redis 异步客户端
35. 仿 StackOverflow 开发在线问答系统
❻ python避免死锁方法实例分析
python避免死锁方法实例分析
本文实例讲述了python避免死锁方法。分享给大家供大家参考。具体分析如下:
当两个或者更多的线程在等待资源的时候就会产生死锁,两个线程相互等待。
在本文实例中 thread1 等待thread2释放block , thread2等待thtead1释放ablock,
避免死锁的原则:
1. 一定要以一个固定的顺序来取得锁,这个列子中,意味着首先要取得alock, 然后再去block
2. 一定要按照与取得锁相反的顺序释放锁,这里,应该先释放block,然后是alock
import threading ,time
a = 5
alock = threading.Lock()
b = 5
block = threading.Lock()
def thread1calc():
print "thread1 acquiring lock a"
alock.acquire()
time.sleep(5)
print "thread1 acquiring lock b"
block.acquire()
a+=5
b+=5
print "thread1 releasing both locks"
block.release()
alock.release()
def thread2calc():
print "thread2 acquiring lock b"
block.acquire()
time.sleep(5)
print "thread2 acquiring lock a"
alock.acquire()
time.sleep(5)
a+=10
b+=10
print "thread2 releasing both locks"
block.release()
alock.release()
t = threading.Thread(target = thread1calc)
t.setDaemon(1)
t.start()
t = threading.Thread(target = thread2calc)
t.setDaemon(2)
t.start()
while 1:
time.sleep(300)
输出:
thread1 acquiring lock a
thread2 acquiring lock b
thread1 acquiring lock b
thread2 acquiring lock a
希望本文所述对大家的Python程序设计有所帮助。
❼ 实例方法和类方法的区别 python
有区别的,最主要的区别在于,定义类方法主要是要加一个装饰器,@classmethod
而实例方法没有这个装饰器。这是区别实例方法和类方法的最主要的区别。
在调用上的区别在于,实例方法要先实例化一个对象再调用这个实例化方法,而类方法不需要有类的实例,直接类名.方法名就可以调用。
实例方法至少有一个参数,通常用self,这个参数里面是这个实例本身。类方法至少有一个参数,通常用cls,这个参数里面是这个类本身。
实例方法由于有实例,所以实例的属性对其实可见的,但类方法显然没有属性。
本质上来讲,类方法和实例方法没有本质区别,只不过在调用的时候,实例方法把这个实例本身当做参数传过去了。
以下是示例代码,感受一下。
classmyclass:
@classmethod
defclassMethod(cls):
print('classmethod')
print('parameter:%s'%cls)
pass
definstanceMethod(self):
print('instancemethod')
print('parameter:%s'%self)
pass
m=myclass()
m.instanceMethod()#实例来调用实例方法
myclass.classMethod()#类名.方法名调用类方法
myclass.instanceMethod(m)#类名.方法名,并将实例作为参数传入,和实例调用实例方法一样
❽ python关于实例方法,说法错误的是
a是错误的。
实例方法
定闭困义:第蚂扰一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也闷态旦可以传类的属性和方法);
调用:只能由实例对象调用。
❾ 关于python的实例方法问题
题主你好,
python中创建新实例的时候, 如果相应的类中定义了__init__()方法的话, 会自动调用这个方法. 你可能认为名称"init"和"__init__"差不多, 但计算机其实是个很笨的东西, 它会完全按照设计去执行. 也就是说,在设计的时候就已经定死了, 默认情况下, 创建新实例的时候, 会自动调用类中定义的__init__()方法, 只要你的方法名和__init__有一点不一样也不行.
下图是我在官网上找的关于__init__()调用的简单说明:
高亮部分说的大概意思就是上面讲的,如果相应类中定义了__init__()方法,则在创建该类实例的时候会自动调用里面定义的__init__()方法.
-----
希望可以帮到题主, 欢迎追问.
❿ python入门实例教程
python入门实例教程!
步骤1:这里我将简单告诉大家一个用python软件编写的一个关于货物售价折扣方面的一个计算程序,首先打开python软件。
步骤2:进入python后,会出现如图所示界面,按照图中箭头指示,先选择File选项,然后在下拉菜单中选择New file选项。
步骤3:选择完毕后,会出现一个新的界面,如图箭头和红色框指示。
步骤4:进入这个新的界面,在里面输入自己想编辑的程序,如图所示是我自己编写的一个关于货物售价折扣方面的一个简单的计算程序。
步骤5:程序输入完毕后,按照图中箭头和红色框指示,先选择Run选项,然后在下拉菜单中选择Run Mole(注:除此方法外还可以点击键盘F5)。
步骤6:此时会在原界面出现如图所示的字样,这是因为我编写程序编辑好的,此时你可以输入一个数字,然后回车,它又会让你输入一个折扣,输入完即可得出最后售价结果。
步骤7:如图所示,这里我输入的原价是10,折扣是0.2,故此系统根据我编写的程序计算除了打折后的价格为2。