标题 | Python的ORM框架SQLObject入门实例 |
内容 | 这篇文章主要介绍了Python的ORM框架SQLObject简单使用实例,使用LinuxMint15、Python2.7,需要的朋友可以参考下。 SQLObject和SQLAlchemy都是Python语言下的ORM(对象关系映射)解决方案,其中SQLAlchemy被认为是Python下事实上的ORM标准。当然,两者都很优秀。 一、安装 代码如下: sudopipinstallSQLObject 使用SQLObject操作mysql时候报错ImportError:NomodulenamedMySQLdb,那便安装MySQLdb: 代码如下: sudopipinstallMySQL-python 没想到又报错了: 代码如下: _mysql.c:29:20:fatalerror:Python.h:Nosuchfileordirectory compilationterminated. error:command'x86_64-linux-gnu-gcc'failedwithexitstatus1 解决方法: 代码如下: sudoapt-getinstalllibmysqlclient-devpython-dev 二、使用其创建表 将mysql默认存在的test数据库的编码改为utf-8。 代码如下: #-*-encoding:utf-8-*- fromsqlobjectimport* uri=r'mysql://root:passwd@127.0.0.1/test?charset=utf8' sqlhub.processConnection=connectionForURI(uri) classUser(SQLObject): name=StringCol(length=10,notNone=True) email=StringCol(length=20,notNone=True) password=StringCol(length=20,notNone=True) User.createTable() 运行后,会看到test数据库下出现表user,我们使用showcreatetableuser;查看user表的创建语句,结果如下: 代码如下: CREATETABLE`user`( `id`int(11)NOTNULLAUTO_INCREMENT, `name`varchar(10)NOTNULL, `email`varchar(20)NOTNULL, `password`varchar(20)NOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8 三、添加/删除记录 现在我们尝试着添加和删除记录。 代码如下: user1=User(name='user1',email='user1@163.com',password='111') user2=User(name='user2',email='user2@163.com',password='222') 运行后,使用select*fromuser能看到这两个记录: 代码如下: mysql>select*fromuser; +----+-------+---------------+----------+ |id|name|email|password| +----+-------+---------------+----------+ |1|user1|user1@163.com|111| |2|user2|user2@163.com|222| +----+-------+---------------+----------+ 2rowsinset(0.00sec) 删除数据 代码如下: u2=User.get(2) printUser.delete(u2.id) 四、查询记录 通过id获取数据: 代码如下: u1=User.get(1) u1_1=User.get(1) u2=User.get(2) printid(u1),u1 printid(u1_1),u1_1 printid(u2),u2 输出结果: 代码如下: 23864656 23864656 23930512 由于id(u1)和id(u1_1)是相等的,所以u1和u1_1是内容一致,这样做可以减少内存使用。可以在连接数据库时候设置参数,禁止该方式。 根据name进行查询: 代码如下: users=User.select(User.q.name=="user1") printusers printlist(users) 输出结果: 代码如下: SELECTuser.id,user.name,user.email,user.passwordFROMuserWHERE((user.name)=('user1')) [] 模糊查询: 代码如下: users=User.select(User.q.name.startswith('u')) printusers printlist(users) users=User.select(User.q.name.contains('ser1')) printusers printlist(users) 运行结果: 代码如下: SELECTuser.id,user.name,user.email,user.passwordFROMuserWHERE(user.nameLIKE('u%')ESCAPE'\\') [,] SELECTuser.id,user.name,user.email,user.passwordFROMuserWHERE(user.nameLIKE('%ser1%')ESCAPE'\\') [] 一对多映射 我们新建一个表,保存user中每个用户的编写的文章: 代码如下:classUser(SQLObject): name=StringCol(length=10,notNone=True) email=StringCol(length=20,notNone=True) password=StringCol(length=20,notNone=True) classArticle(SQLObject): title=StringCol(length=100,notNone=True) content=StringCol(notNone=True) user=ForeignKey('User') Article.createTable() 运行后,使用showcreatetablearticle查看创建语句: 代码如下: CREATETABLE`article`( `id`int(11)NOTNULLAUTO_INCREMENT, `title`varchar(100)NOTNULL, `content`textNOTNULL, `user_id`int(11)DEFAULTNULL, PRIMARYKEY(`id`), KEY`article_user_id_exists`(`user_id`), CONSTRAINT`article_user_id_exists`FOREIGNKEY(`user_id`)REFERENCES`user`(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8 添加数据: 代码如下: u1=User.get(1) a1=Article(title='title1',content='你好',user=u1) 查询数据: 代码如下: u1=User.get(1) a1=Article.select(Article.q.user==u1) printa1 printlist(a1) printlist(a1)[0].content 这种方式也可以: 代码如下: a1=Article.select(Article.q.userID==1) printa1 printlist(a1) printlist(a1)[0].content 运行结果: 代码如下: SELECTarticle.id,article.title,article.content,article.user_idFROMarticleWHERE((article.user_id)=(1)) [<Articletitle='title1'>] 你好 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。