专栏首页python3python使用数据库

python使用数据库

使用python-DB-API,只需要搞清楚Connection、Cursor对象,打开后一定得关闭。

Cursor对象执行insert、update、delete,结果由rowcount返回影响的行数,拿到执行结果。

Cursor对象执行select,通过featchall()拿到list的结果集,每个元素都是一个tuple,对应一行记录

SQL带有参数,需要把参数按照位置传递给execute()方法。

安装mysql官方提供的python驱动

pip install mysql-connection-python --allow-external mysql-connection-python

操作mysql的步骤:

import mysql.connector

conn=mysql.connector.connect(user='root', password='password', database='test')

cursor=conn.cursor()

cursor.execute('create table user(id varchar(20) primary key, name varchar(20))')

cursor.execute('insert into user(id, name) values(%s, %s)', ['1', 'Michael'])

cursor.rowcount

conn.commit()

cursor.close()

cursor = conn.cursor()

cursor.execute('select * from user where id = %s', ['1'])

values = cursor.fetchall()

values

cursor.close()

conn.close()

ORM技术 -- Object-Relational Mapping,把关系数据库的表接受映射到对象上。

ORM框架 -- SQLAlchemy 

SQLAlchemy的应用, 初始化DBSession

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'
    
    id = Column(String(20), primary_key = True)
    name = Column(String(20))
    
    
engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')

DBSession = sessionmaker(bind=engine)

一个表对应一个class。使用ORM添加记录,可以看成为添加一个User对象。

session = DBSession()
new_user=User(id='5', name='bob')

session.add(new_user)
session.commit()
session.close()

添加数据的关键是获取session,然后把对象添加到session,最后提交并关闭。DBSession对象可视为当前数据库连接。

使用ORM从数据库中查询数据:结果是一个user对象,而不是tuple。

session = DBSession()

user = session.query(User).filter(User.id=='5').one()

print('type:', type(user)
print('name:', user.name)
session.close()

多个表通过外键实现一对多,多对多的关联。ORM框架也可以实现一对多,多对多功能。

class User(Base):
    __tablename__ = 'user'
    
    id = Column(String(20), primary_key = True)
    name = Column(String(20))
    
    books = relationship('Book')
    
    
class Book(Base):
    __tablename__ = 'book'
    
    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    
    user_id = Column(String(20), ForeignKey('user,id'))

查询一个User对象时,该对象的books属性将返回一个包含若干个Book对象的list。

ORM的作用就是把数据库表的一行记录与一个对象做相互转换, 使用ORM的前提是了解关系数据库的原理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python将数据库数据导入到EXCEL

          每次给运营导数据的时候,如果不用工具的话,就是直接生成.csv格式的文件,这样的文件不支持'sheet',每次还有手工进行,相当的不科学,今天试试P...

    py3study
  • python在sqlite中插入数据

    py3study
  • python统计前十出现最多的词

         “一个可读文件,有一万行,一行只有一个单词,单词可以重复的,求出这一万行中出现频繁次数最多的前10个单词”

    py3study
  • Docker学习记录(2)——JAVA应用容器化(JAVA博客应用Solo)

    以GitHub上一个开源JAVA博客应用为例,地址为:https://github.com/b3log/solo。它的项目结构是基于Maven的要求布置的,通过...

    胡了了
  • [软件使用]在Word中使用通配符查询

    在写毕设论文的时候发现Word的通配符查询非常方便,而且搜到了一篇不错的帖子,可供以后查阅。

    祥知道
  • JMeter逻辑控制器08

    前言 在jmeter中逻辑控制器主要分类两类: 控制jmeter测试计划中节点的逻辑执行顺序等等 对jmeter的节点进行分组,方便结果统计等等 进一步简化下,...

    苦叶子
  • 小鹏汽车再融资!新汽车迎来黄金时代却难掩残酷现实

    前段时间,雷军到广州考察小鹏汽车一天,备受各界关注,当时小鹏汽车被传正在寻求融资,何小鹏在给员工的内部信中提到:“很快会和大家报告下一步的融资信息”。

    罗超频道
  • 加密就安全了?一览用户的数据安全盲点

    追溯至网络通信安全起始之初,数据安全人员就不得不面对证书使用这一挑战。网页证书是传输层安全通信的基础,增加了网络站点连接的安全性,通常显示为“https”中的“...

    FB客服
  • 使用MySQL正则表达式 __MySQL必知必会

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较。 MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SE...

    wangxl
  • 二值网络--XNOR-Net: ImageNet Classification Using Binary Convolutional

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1148525

扫码关注云+社区

领取腾讯云代金券