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的初步使用 

     SQLAlchemy入门(一)

python ORM - sqlalchemy 操作使用的更多相关文章

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

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

  2. 【python】-- SQLAlchemy操作MySQL

    ORM.SQLAchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是 ...

  3. Python 使用sqlalchemy操作MYSQL

    1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql

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

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

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

    ORM是什么? 在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途. ORM代表对象关系映射.ORM中的每个单词解释了他们在实际项 ...

  6. 基于Python的SQLAlchemy的操作

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

  7. Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍

    1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 ...

  8. tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作 一. ORM #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不 ...

  9. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

随机推荐

  1. java中main函数怎么调用外部非static方法

    使用外部方法时(不管是static还是非static),都要先new一个对象,才能使用该对象的方法. 举例如下: 测试函数(这是错误的): public class Test { public sta ...

  2. JDBC连接SQL Server

    下载jdbc驱动包 下载地址,我下载的是exe版本的,其实是格自解压包.下载完毕之后,双击运行,会解压在当前目录下. Microsoft SQL Server JDBC Driver 3.0\sqlj ...

  3. 洛谷 U14472 数据结构【比赛】 【差分数组 + 前缀和】

    题目描述 蒟蒻Edt把这个问题交给了你 ---- 一个精通数据结构的大犇,由于是第一题,这个题没那么难.. edt 现在对于题目进行了如下的简化: 最开始的数组每个元素都是0 给出nnn,optopt ...

  4. 开放接口/RESTful/Api服务的设计和安全方案

    总体思路 这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) ...

  5. Fox

    Portal --> broken qwq Description 有n只狐狸在一起聚餐,每只狐狸都有一个年龄.按照狐狸们的习惯,坐在一起的两只狐狸的年龄之和需要是质数.现在这些狐狸们在一些圆桌 ...

  6. 【loj2033】生成魔咒

    Portal --> loj2033 Solution 这题..虽然说好像也是sam的裸题不过既然在智力康复那就强制后缀数组吧qwq ​ (晚点再用sam写一次qwq) 首先如果是要求本质不同的 ...

  7. 专题训练之区间DP

    例题:以下例题部分的内容来自https://blog.csdn.net/my_sunshine26/article/details/77141398 一.石子合并问题 1.(NYOJ737)http: ...

  8. python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法

    一.什么是继承                                                                          继承是一种创建新的类的方式,在pyth ...

  9. ios 逆向

    Theos https://www.jianshu.com/p/307243ea40e4 Dumpsdecrypted https://www.cnblogs.com/wangyaoguo/p/908 ...

  10. Ubuntu+NDK编译openssl

    为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...