python ORM - sqlalchemy 操作使用,ormsqlalchemy,python操作数据
python ORM - sqlalchemy 操作使用,ormsqlalchemy,python操作数据
python操作数据库
使用 ORM - sqlalchemy,pymsql
安装:
pip install pymsqpip install sqlalchemy
一、‘‘‘连接数据库‘‘‘
‘‘‘导入必须的包‘‘‘
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker
# 基本设置 HOSTNAME = ‘127.0.0.1‘ # 本地 liunxPOST = ‘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 datetimefrom 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 relationshipfrom 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 sessionfrom 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入门(一)
python ORM - sqlalchemy 操作使用
相关内容
- python-基础 生成式 生成器 迭代器 JSON pickl,python-json,目
- 关于python鸭子类型和白鹅类型,,1,白鹅类型白鹅类型
- python:多进程、多线程,,线程&进程对于操作系
- python数据库连接池,python数据库连接,一 DBUtils的
- 关于python字符串拼接的几种方法,,当时看完python
- python机器学习scikit-learn的安装,,在安装scikit-
- python 三元表达式,,python 三元表
- 小白的Python,第一天-Python初识,python-python,一、Python介
- python3-相关系数,python3-系数,输出结果是一个相关系
- python 之Entry,pythonentry,# Tkinter教
评论关闭