数据库python前端_Python的数据库操作(Sqlalchemy)

ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。

SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。支持多数据库,如mysql、Oracle等

安装:

pip3 install sqlalchemy

使用步骤:

l

建立数据库连接

l

描述表结构(如果表不存在则会新建表)

l

得到数据库操作游标(会话session)

l

操作数据表,提供了两种方法,分别为原生SQL语句操作(execute)和类方式操作

通过原生SQL语句操作

1 #导入必要模块

2 from sqlalchemy import create_engine

3

4 #得到连接对象

5 #参数:mysql+pymysql://用户名:密码@地址/数据库名

6 #添加参数 echo=True 表示打印日志到控制台

7 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",encoding='utf-8')

8

9 #查询

10 resselect=connal.execute("select * from tb_dong")

11 print(resselect.rowcount) #输出查询到的值

12 print(resselect.fetchall()) #输出列表数据

13

14 #插入,输出影响行数

15 resinsert=connal.execute("insert into tb_dong(namex,sex) values('%s','%s')"%("东小东xx","F")).rowcount

16 print(resinsert)

类方式操作

描述表结构时:

设置为主键【primary_key=True】、

是否可为空【nullable=False】、

外键【ForeignKey(“另一个表名.字段名”)】 #表名与字段名的点不可去掉

1 #导入必要模块

2 import sqlalchemy

3 from sqlalchemy import create_engine

4 from sqlalchemy.ext.declarative import declarative_base

5 from sqlalchemy import Column, Integer, String

6 from sqlalchemy.orm import sessionmaker

7

8

9 #-------------得到连接对象--------------------

10 #参数:mysql+pymysql://用户名:密码@地址/数据库名

11 #添加参数 echo=True 表示打印日志到控制台

12 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",

13 encoding='utf-8')

14

15 #----------------创建表,描述表结构-----------------------

16 #得到基类

17 classal = declarative_base()

18 class tb_dong3(classal):

19 __tablename__ = "tb_dong3" # 表名为 tb_dong3

20 id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增

21 name = Column(String(15))

22 password = Column(String(15))

23

24 def __repr__(self):

25 return ""%(self.id,self.name,self.password)

26

27 #提交创建表命令

28 classal.metadata.create_all(connal)

29

30 #------------------ 游标获取 ------------------

31

32 #得到数据库游标

33 cousession=sessionmaker(bind=connal)()

34

35 #--------------------插入数据------------------

36 #设置要插入的数据

37 dataobj1=tb_dong3(name="dong",password="dongpp东1")

38 dataobj2=tb_dong3(name="dong",password="dongpp东2")

39

40 #添加数据,参数可为列表:add([dataobj1, dataobj1])

41 cousession.add(dataobj1)

42 cousession.add(dataobj2)

43

44 #提交数据

45 cousession.commit()

46

47 #--------------------查询数据---------------------

48 #filter(tb_dong3.id>1)为条件查询

49 #多条件查询可以使用多个 filter 拼接

50 #查询所有:all() 查询一个:first() 计数:count()

51 resdata=cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").all() #查询所有

52 print(resdata) #输出全部查询结果

53 #print(cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").count()) #查询所有

54 print(len(resdata)) #得到查询结果的数量,相当于上面一句

55 print(resdata[0].name) #取出name值

56

57 #----------------- 更新--------------------------

58 #先查询,然后赋值,然后提交

59 resupdate=cousession.query(tb_dong3).filter(tb_dong3.id==3).first()

60 resupdate.name="ddddddddd"

61 resupdate.password="xxxxxx"

62 cousession.commit()

63

64 #------------------- 删除 -----------------------

65 resdel=cousession.query(tb_dong3).filter(tb_dong3.id==73).first()

66 cousession.delete(resdel)

67 cousession.commit()

连表操作:

重点在于需要描述两张表

1 #导入必要模块

2 from sqlalchemy import create_engine

3 from sqlalchemy.ext.declarative import declarative_base

4 from sqlalchemy import Column, Integer, String

5 from sqlalchemy.orm import sessionmaker

6

7

8 #-------------得到连接对象--------------------

9 #参数:mysql+pymysql://用户名:密码@地址/数据库名

10 #添加参数 echo=True 表示打印日志到控制台

11 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",

12 encoding='utf-8')

13

14 #----------------创建表,描述表结构-----------------------

15 #得到基类

16 classal = declarative_base()

17 #建立tb_dong3表描述

18 class tb_dong3(classal):

19 __tablename__ = "tb_dong3" # 表名为 tb_dong3

20 id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增

21 name = Column(String(15))

22 password = Column(String(15))

23

24 def __repr__(self):

25 return ""%(self.id,self.name,self.password)

26

27 #建立tb_dong2表描述

28 class tb_dong2(classal):

29 __tablename__ = "tb_dong2" # 表名为 tb_dong3

30 id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增

31 name = Column(String(10))

32 sex = Column(String(1))

33

34 def __repr__(self):

35 return ""%(self.id,self.name,self.sex)

36

37 #提交创建表命令

38 classal.metadata.create_all(connal)

39

40 #------------------ 游标获取 ------------------

41

42 #得到数据库游标

43 cousession=sessionmaker(bind=connal)()

44

45 #-------------------- 连表查询 ---------------------

46 #tb_dong3.name==tb_dong2.name 两表的name字段值相等

47 #得到单表数据(tb_dong2)

48 #resdata=cousession.query(tb_dong2).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()

49 #输出两张表的数据(tb_dong2,tb_dong3)

50 resdata=cousession.query(tb_dong2,tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()

51 print(resdata) #输出全部查询结果

52 print(len(resdata)) #得到查询结果的数量,相当于上面一句

53 print(resdata[0][0].name) #取出name值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值