摘要:环境搭建安装相应的软件包数据库用于连接服务器的一个库连接数据库从中导入,创建引擎建立与数据库的连接。使用方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。应用通常只需要有一个的实例。
SQLAlchemy
1.环境搭建安装相应的软件包
1.mysql数据库
2.pymysql用于连接MySQL服务器的一个库
3.sqlalchemy
$ pip install pymysql $ pip install sqlalchemy2.连接数据库
从sqlalchemy中导入create_engin,创建引擎建立与数据库的连接。
from sqlalchemy import create_engine
准备连接数据库的数据:
HOSTNAME = "127.0.0.1" # 这里填ip地址 PORT = "3306" # 端口号 mysql一般默认为3306 DATABASE = "mydb" # 数据库名 USERNAME = "admin" # 用户名 PASSWORD = "rootqwe123" # 用户登录密码
DB_URI的格式:
数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名?字符编码
DB_URI=mysql+pymysql://
engine = create_engine(DB_URI)
我们可以尝试着测试一下是否连接上:
print(dir(engine)),当有打印出方法时,表示连接成功。
database_connect.py
from sqlalchemy import create_engine HOSTNAME = "127.0.0.1" # 这里填ip地址 PORT = "3306" DATABASE = "mydb" USERNAME = "admin" PASSWORD = "Root110qwe" Db_Uri = "mysql+pymysql://{}:{}@{}/{}?charset=utf8".format(USERNAME,PASSWORD,HOSTNAME,DATABASE) engine = create_engine(Db_Uri) if __name__=="__main__": print(dir(engine))3.创建模型 1.声明映像
对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自sqlalchemy中的基类。
使用Declarative方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
应用通常只需要有一个base的实例。我们通过declarative_base()功能创建一个基类。
在database_connect.py文件中加入下列代码
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base(engine)2.创建会话
定义个session会话对象,使用 sessionmaker初始化一个类对象
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) session = Session()3.新建模型
新建一个user模型
新建user_module.py文件
from datetime import datetime from sqlalchemy import Column,Integer,String,DateTime,Boolean from database_connect import Base,session class User(Base): __tablename__="user" id = Column(Integer,primary_key=True,autoincrement=True) username = Column(String(20),nullable=False) password = Column(String(100)) creatime = Column(DateTime,default=datetime.now) last_login = Column(DateTime) _locked = Column(Boolean,default=Falsem,nullable=False) #---将创建好的user类,映射到数据库的user表中---
在start.py mian函数最后中加入这一行代码
Base.metadata.create_all()
这就是创建好了一个表,我们可以在数据库中查看一下。
4.增删查改 1.增加数据def add_user(): #添加单个对象 #person = User(username="lethe",password="212121") #session.add(person) #在start.py中的main函数中执行添加函数 User().add_user()
#添加多个对象 #把add_user中的代码注释并添加下列代码 session.add_all([User(username="banban", password="1212120"), User(username="kuku", password="32321")]) #提交才会生效,和命令行有区别 session.commit()
#先将前面的User().add_user()注释掉 否者又会添加相同的数据 def search_user(): row = session.query(User).all() # 查询全部数据 print(row) #再在start.py中的main函数后面添加 User().search_user()
#将search_user()里的内容注释掉 添加下列代码 row = session.query(User).filter_by(id=1).all() # 按id查询 print(row) row = session.query(User).filter(User.username == "banban").all() # 按字段查询 print(row) print(row[0].locked) #查询banban这条信息的locked信息
但其实我们可以在定义user类的时候这么去写
@classmethod def all(cls): return session.query(cls).all() @classmethod def by_id(cls,id): return session.query(cls).filter_by(id=id).all() @classmethod def by_name(cls,name): return session.query(cls).filter_by(username=name).all() @property def locked(self): return self._locked
这样在只需要调用类方法就行
print(User.all()) print(User.by_id(1)) print(User.by_name("lethe")) print(User.by_name("kuku"))3.更新
def update_user(): row = session.query(User).filter_by(username="lethe").update({User.password:"1010101"}) session.commit()4.删除
def delete_user(): row = session.query(User).filter_by(username="banban")[0] #first print(row) session.delete(row) session.commit()
更新与删除操作过程与前面类似 这里就不一一赘述了
以上就是sqlalchemy的基本知识。
设置步骤:
点击view-->点击Toll Windows -->点击database
在在pycharm右侧找到database,点开它
点+号-->Data Source--> 选择mysql(我这里是用的mysql,其他数据库也行)
按要求填写对应的项-->点击Test connection 测试一下是否能成功连接(如果这个按钮是灰色的需要先点击左下角的按钮安装插件)
start.py
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from user_module import User from tornado.options import define, options from database_connect import engine, session from user_module import Base define("port", default=9000, help="run port", type=int) if __name__ == "__main__": connection = engine.connect() result = connection.execute("select 1") print(Base) Base.metadata.create_all() # 建表 User().add_user() # User().search_user() # User().update_user() # User().delete_user() print(User.all()) print(User.by_id(1)) print(User.by_name("lethe")) print(User.by_name("kuku"))
database_connect.py
from sqlalchemy import create_engine HOSTNAME = "127.0.0.1" # 指的是linux的ip 因为代码运行在linux上 POST = "3306" # 直接在linux上连接数据库不需要端口转发 DATABASE = "mydb_test" USERNAME = "admin" # 登录的用户 PASSWORD = "Root110qwe" db_url = "mysql+pymysql://{}:{}@{}:{}/{}".format( USERNAME, PASSWORD, HOSTNAME, POST, DATABASE ) # +号两边不能加空格 这里出现了点问题 将这个字符串重新写过后就可以了 engine = create_engine(db_url) # 创建引擎 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base(engine) # print(result.fetchone()) from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) session = Session()
user_module.py
from datetime import datetime from sqlalchemy import Column, Integer, String, DateTime, Boolean from database_connect import Base, session # 模块名灰色代表还没有被调用 class User(Base): # 继承Base这个引擎 新建表 __tablename__ = "user" # 表名 id = Column(Integer, primary_key=True, autoincrement=True) username = Column(String(20), nullable=False) password = Column(String(50)) email = Column(String(50)) phone_number = Column(String(20)) id_card = Column(String(30)) createtime = Column(DateTime, default=datetime.now) _locked = Column(Boolean, default=False, nullable=True) @classmethod def all(cls): # 类方法 return session.query(cls).all() @classmethod def by_id(cls, id): return session.query(cls).filter_by(id=id).all() @classmethod def by_name(cls, name): return session.query(cls).filter_by(username=name).all() @property def locked(self): return self._locked def __repr__(self): return "" % ( self.id, self.username, self.password, self.email, self.phone_number, self.id_card, self.createtime, self._locked ) def add_user(self): # 添加单个对象 # person = User(username="lethe",password="212121") # session.add(person) # 添加多个对象 session.add_all([User(username="banban", password="1212120"), User(username="kuku", password="32321")]) # 提交才会生效,和命令行有区别 session.commit() def search_user(self): # row = session.query(User).all() # print(row) row = session.query(User).filter_by(id=1).all() print(row) row = session.query(User).filter(User.username == "banban").all() print(row) print(row[0].locked) def update_user(): row = session.query(User).filter_by(username="lethe").update({User.password: "1010101"}) session.commit() def delete_user(): row = session.query(User).filter_by(username="banban")[0] # first print(row) session.delete(row) session.commit()
将上面的这些程序放在同一目录下 然后运行start.py
再去ubuntu里面的mysql看一下这张表
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44662.html
摘要:菜鸟教程框架中文手册入门目标使用搭建通过对数据增删查改没了纯粹占行用的拜 后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一峰:理解RESTful架构 阮一峰:RESTful API 设计指南 RESTful API指南 依赖注入 D...
摘要:菜鸟教程框架中文手册入门目标使用搭建通过对数据增删查改没了纯粹占行用的拜 后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一峰:理解RESTful架构 阮一峰:RESTful API 设计指南 RESTful API指南 依赖注入 D...
摘要:菜鸟教程框架中文手册入门目标使用搭建通过对数据增删查改没了纯粹占行用的拜 后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一峰:理解RESTful架构 阮一峰:RESTful API 设计指南 RESTful API指南 依赖注入 D...
阅读 1317·2021-10-27 14:14
阅读 3573·2021-09-29 09:34
阅读 2476·2019-08-30 15:44
阅读 1715·2019-08-29 17:13
阅读 2569·2019-08-29 13:07
阅读 866·2019-08-26 18:26
阅读 3341·2019-08-26 13:44
阅读 3209·2019-08-26 13:37