python可视化增删查改_Tornado-08、SQLAlchemy简单的增删查改

SQLAlchemy

1.环境搭建

安装相应的软件包

1.mysql数据库

2.pymysql用于连接MySQL服务器的一个库

3.sqlalchemy

$ pip install pymysql

$ pip install sqlalchemy

2.连接数据库

从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://:@/?charset=utf8

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()

2.查询数据

#先将前面的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的基本知识。

5.pycharm的图形化数据库工具

设置步骤:

点击view-->点击Toll Windows -->点击database

在在pycharm右侧找到database,点开它

点+号-->Data Source--> 选择mysql(我这里是用的mysql,其他数据库也行)

按要求填写对应的项-->点击Test connection 测试一下是否能成功连接(如果这个按钮是灰色的需要先点击左下角的按钮安装插件)

6.附录

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 "

"username='%s', " \

"password='%s', " \

"email='%s', " \

"phone_number='%s', " \

"id_card='%s', " \

"createtime='%s', " \

"_locked='%s'\n)>" % (

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看一下这张表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值