python操作数据库

使用 ORM - sqlalchemy,pymsql

安装:

pip install pymsq
pip install sqlalchemy

一、 '''连接数据库'''

 '''导入必须的包'''from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 基本设置
HOSTNAME = '127.0.0.1'   # 本地 liunx
POST = '3306'            # mysql 默认端口
DATABASE = 'mydb'        # 数据库名字
USERNAME = 'admin'       # 用户名
PASSWORD = 'Root110qwe'  # 密码

# 固定写法db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,POST,DATABASE
)# 这里的 db_url 就是连接数据库的路径。“mysql+mysqldb”指定了使用 MySQL-Python 来连

engine = create_engine(db_url,echo=False)   # 初始化数据库连接, 
# create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。
Base = declarative_base(engine)  # 创建对象的基类Session = sessionmaker(engine)  # 创建与数据库连接的Session类session = Session() # session可以视为数据库连接# sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。

if __name__ == '__main__':  # 测试是否连接成功connection = engine.connect()result = connection.execute('select 1')print(result.fetchone())

二 、 '''创建 类—表 映射关系'''

    创建表的同时,也映射数据库;也可以单独创建表,

# -*- coding:utf-8 -*-from datetime import datetime
from sqlalchemy import Column,Integer,String,DateTime
from connect import Base,session # 这里connect前面加上点之后 不能直接执行文件,但是可以外部调用'''创建表 user '''
class User(Base):__tablename__ = 'user'id = Column(Integer,primary_key=True,autoincrement=True) #主键 ,自增长username = Column(String(20),nullable=False) # 用户名长度 20 、非空password = Column(String(50)) # 密码长度 50creatime = Column(DateTime,default=datetime.now) # 创建时间
@classmethoddef by_name(cls,name): # 定义查询函数,返回查询结果return session.query(cls).filter(cls.username==name).first()def __repr__(self): # 重写repr 便于阅读return "<User(id=%s,username%s,password=%s,createtime=%s)>" % (self.id,self.username,self.password,self.creatime)from sqlalchemy.orm import relationship
from sqlalchemy import ForeignKey'''创建表 user_details '''
class UserDetails(Base):__tablename__='user_details'id = Column(Integer, primary_key=True, autoincrement=True)id_card = Column(Integer,nullable=True,unique=True)lost_login = Column(DateTime)login_num = Column(Integer,default=0)user_id = Column(Integer,ForeignKey('user.id'))'''User 要关联的表的名字backref 返回 details 方法(属性)uselist 默认为True, 表示一对多关系(False表示一对一)cascade 自动处理关系 相当于mysql中的ON DELETE 类似 有 7 个可选参数在代码层控制'''userdetail = relationship('User',backref='details',uselist=False,cascade='all')def __repr__(self):  # 重写repr 便于阅读return '<UserDetails(id=%s,id_card=%s,last_login=%s,login_num=%s,user_id=%s)>'%(self.id,self.id_card,self.lost_login,self.login_num,self.user_id)from sqlalchemy import  Table''' 创建表的另一种方法 这种方法没有映射,如果需要映射 还需重新创建 类,重写 repr'''
user_article = Table('user_article',Base.metadata,Column('user_id',Integer,ForeignKey('user.id'),primary_key=True),Column('article_id',Integer,ForeignKey('article.id'),primary_key=True))
'''创建表 article '''
class Article(Base):__tablename__ = 'article'id = Column(Integer,primary_key=True,autoincrement=True)content = Column(String(50),nullable=True)create_time = Column(DateTime,default=datetime.now())article_user = relationship('User',backref='article',secondary=user_article)# 创建映射关系def __repr__(self):  # 重写repr 便于阅读return  'Article(id=%s,content=%s,create_time=%s)'%(self.id,self.content,self.create_time)if __name__ == '__main__':Base.metadata.create_all() # 执行

三 、 '''简单的 增、删、查、改 操作 '''

# -*- coding:utf-8 -*-
from connect import session
from user_module import Userdef add_user(): # 增# persson = User(username='xiaohong',password='qwe123',id=1)# session.add(persson)  # 提交单条数据# 一次提交多条数据 , 注意 这里 all 里面是列表
    session.add_all([User(username='小红', password='qwe123mmm'),User(username='老王', password='12345nnnnn'),User(username='小明', password='654321hhhhh'),])session.commit() # 必须提交def search_user(): # 查询 默认repr 便于机器阅读,需要重写rows = session.query(User).all()print(rows)def update_user(): # 改session.query(User).filter(User.id==2).update({User.password:1})session.commit()def delete_user(): # 删除# rows = session.query(User).filter(User.id==2)[0]rows = session.query(User).all()print(rows)for i in rows: # 如果查到的数据量大,就是用循环删除 session.delete(i)session.commit()if __name__ == '__main__':add_user()# search_user()# delete_user()# update_user()

推荐文章:廖雪峰的  使用SQLAlchemy

       脚本之家的   Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

       z+j  的  Python SqlAlchemy使用方法

      K.Takanashi 的 SQLAlchemy的初步使用 

     SQLAlchemy入门(一)

转载于:https://www.cnblogs.com/zlsgh/p/8538911.html

python ORM - sqlalchemy 操作使用相关推荐

  1. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

  2. 使用python ORM来操作MySQL

    昨天的博客是用MySQL官方的MySQL-connector驱动来完成数据库的连接和使用,但只适用于小项目的操作,当项目规模增加时,代码会越来越复杂,维护成本也越来越高,此时需要一个更好的设计模式.即 ...

  3. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解

    当开发与数据库需要在一起使用的应用程序时,对象关系映射器(ORM)通常用于Python编程中.Python ORM的示例是SQLAlchemy,Peewee,Pony-ORM和Django.选择ORM ...

  4. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作二.ORM sqlalchemy操作#coding=utf-8 # model.pyfrom app import dbclass Use ...

  5. python sqlalchemy中文手册-基于Python的SQLAlchemy的操作

    安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...

  6. python orm框架sqlalchemy_python orm 框架中sqlalchemy用法实例详解

    本文实例讲述了python orm 框架中sqlalchemy用法.分享给大家供大家参考,具体如下: 一.ORM简介 1. ORM(Object-Relational Mapping,对象关系映射): ...

  7. Django和SQLAlchemy,哪个Python ORM更好?

    Django和SQLAlchemy,哪个Python ORM更好? ORM是什么? 在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的 ...

  8. Flask ORM SQLAlchemy数据操作完整案例

    ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数据的映射. 比如:把数据库表中每条记录映射为一个模型对象 优点 只需要面 ...

  9. python orm框架sqlalchemy_ORM框架之SQLALchemy

    一.面向对象应用场景: 1.函数有共同参数,解决参数不断重用: 2.模板(约束同一类事物的,属性和行为) 3.函数编程和面向对象区别: 面向对象:数据和逻辑组合在一起: 函数编程:数据和逻辑不能组合在 ...

最新文章

  1. 我的人生项目 -- 启动
  2. Bullmind在线读书笔记软件
  3. java并发中CountDownLatch的使用
  4. pyspider 安装 和 快速开始
  5. json模拟数据怎么用_在使用axios获取自己模拟的json数据是踩到的坑
  6. 理解有参构造器和无参构造器的作用
  7. mysql group by_技术分享 | 回顾 MySQL 的 MTS
  8. 魅族17将配备GaN氮化镓充电器:快充安全又高效
  9. 数据恢复的学习旅程开始
  10. 二叉树中和为某一值的路径(一)(C++)
  11. C#热血传奇游戏服务端再次开源更新
  12. Linux下vsftp服务器原理、安装、配置实战
  13. 基于大数据的图书推荐系统
  14. ⭐️C#零基础到入门 ⭐️| 带你认识编程中的—23种设计模式 六大设计原则
  15. torch中dataloader加速
  16. 【托业】【新托业TOEIC新题型真题】学习笔记13-题库四-P7
  17. Android 支付宝开发错误总结
  18. 广义瑞利商_瑞利商定义和广义瑞利商
  19. 李嘉璇:技术人如何深入人工智能
  20. YOLOV1-目标检测综述

热门文章

  1. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——Modern AI骨架脉络
  2. TMS320F28335之GPIO原理
  3. 【Tools】Visual Studio 2019专业版下载和安装
  4. 【STM32】中断相关函数和类型
  5. 【Linux】一步一步学Linux——whoami命令(96)
  6. 【Linux】一步一步学Linux——userdel命令(84)
  7. python cms tornado_都2020年了,python的tornado框架还有用武之力么?
  8. 路径总和 II—leetcode113
  9. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】
  10. 将 app 打包成 deb 发布安装