python ORM - sqlalchemy 操作使用
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 = '' # 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)) # 密码长度 50
creatime = Column(DateTime,default=datetime.now) # 创建时间 @classmethod
def 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 User def 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的初步使用
python ORM - sqlalchemy 操作使用的更多相关文章
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- 【python】-- SQLAlchemy操作MySQL
ORM.SQLAchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是 ...
- Python 使用sqlalchemy操作MYSQL
1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql
- flask 操作mysql的两种方式-sqlalchemy操作
flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...
- Django和SQLAlchemy,哪个Python ORM更好?
ORM是什么? 在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途. ORM代表对象关系映射.ORM中的每个单词解释了他们在实际项 ...
- 基于Python的SQLAlchemy的操作
安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...
- Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 ...
- tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作
tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作 一. ORM #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不 ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
随机推荐
- P2762 太空飞行计划问题(网络流24题之一)
题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...
- ubuntu adduser
ubuntu adduser 添加用户 hexan 到目录 /home/hexan 下.$ sudo adduser hexan -home /home/hexan 添加一个普通用户adduser [ ...
- bzoj2956: 模积和(数论)
先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...
- 【bzoj2006】【NOI2015】超级钢琴
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4292 Solved: 2195[Submit][Statu ...
- codeforces 217E 【Alien DNA】
倒序考虑每一个操作,对于一个操作$[l, r]$,他产生的影响区间将是$[r+1,r + r + l - 1]$,如果$r+l-1>K$的话,$K$之后的区间我们是不关心的. 暴力扫描这个区间 ...
- 流媒体协议之RTSP详解20170922
一.RTSP协议介绍 1.什么是rtsp? RTSP协议以客户服务器方式工作,,如:暂停/继续.后退.前进等.它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 ...
- Update submitted Perforce changelist description by P4.net api
Firstly download the p4.net sdk from Perforce official site's download page. It's a .zip file, extra ...
- mysql database 格式的查看和改变
MySQL中,数据库的编码是一个相当重要的问题,有时候我们需要查看一下当前数据库的编码,甚至需要修改一下数据库编码. 查看当前数据库编码的SQL语句为: mysql> use xxx Datab ...
- Rabbitmq--topic
一.前言 前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求.topic类型的Exchan ...
- java project转变成java web project
首先,你的eclipse必须得装有web插件 1.找到项目工作空间目录,打开.project文件,并修改文件, 修改如下: 找到:<natures> </natures&g ...