• python2
  • flask
  • flask_sqlalchemy
  • postgres

实现难点:

  • orm模型 中 model的创建
  • orm模型 中 model的二次获取
  • orm模型 中 model的属性获取
  • orm模型 中 model的数据插入

难点解析:

orm模型 中 model的创建
  • 表的创建(通过sqlalchemy生成)
    • 原有逻辑中表的创建
class Test(db.Model):
	"""测试表"""
	__tablename__ = 'test'
	id = db.Column('id', db.Integer, primary_key=True, autoincrement=True, nullable=False)
	... ...
db.create_all()
 
t = type(str(tablename), (db.Model,), items)
orm模型 中 model的二次获取
def make_models(tablename=None):
	MODEL_MAP = dict()
	models = db.Model.__subclasses__()  # 获取所有db.Model类的子类
	for m in models:
	    MODEL_MAP[m.__tablename__] = m
	if tablename in MODEL_MAP:
	    t = MODEL_MAP[tablename]
		return t
	return None
orm模型 中 model的属性获取
user_id = getattr(t, 'id')  # getattr 可以获取当前类(对象)的字符串对应的对象
orm模型 中 model的数据插入
model = t
condition = ''
for key, format in _property.items():
    condition = condition + '%s="%s", ' % (key, value)
# tablename 不可为中文/  fields 不可为中文 / 前端做限制
table = eval('model(%s)' % condition)  # 此处采用eval函数 来达到, 创建model对象的效果
db.session.add(table)
db.session.commit()
                                    最近在学习sqlalchemy,有个动态修改__tablename__的需求,搜索了好几天,没有太完美的答案,要么看不懂,要么比较古老了,通过研究,整理以下几种sqlalchemy动态修改__tablename__的方法:
一、函数封装table model
在tablemodel类外层嵌套函数,通过函数参数传递tablename给dbmodel类,代码如下:
def make_model(_BOOKNAME):
    Model = declarative_base()  # 生成一个SQ..
                                    sqlalchemy动态创建数据表前言一、sqlalchemy中的Metadata类1.1创建一个MetaData类1.2创建数据表类1.3创建数据表2.动态创建数据表
参考来源:sqlalchemy中创建数据表
在sqlalchemy中,想要动态创建数据表时,可以调用sqlalchemy的MetaData类以及create_all方法创建新的数据表
一、sqlalchemy中的Metadata类
SQL表达式语言根据表列构造其表达式。SQLAlchemy列对象表示数据库表中的一列,而该列又
        __tablename__ = f'table_{suffix}'
        target_name = db.Column(db.String(64), nullable=False, unique=True, comment="名称")
        target_id = db.Column(db.String(32), comment="ID")
                                    通过sqlalchemy创建表需要三要素:引擎,基类,元素
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
引擎:也就是实体数据库连接engine = create_e
                                    作为一个sqlalchemy的新手,完全是基于自身需求来学习它的。最近遇到一个问题:目前手头上有一大堆日志文件,按天组织在一起,每一天的日志文件单独放在同一个目录下。每个目录下的文件的个数不尽相同,有多有少,每个文件里面包含若干条记录,因此,每天的这些日志文件所包含的总记录条数也是不一样的,少则20多万条,多则6000多万条。为了处理方便,现在需要将这些记录全部放进数据库中。一共有47天,如果将这...
                                    flask是一个简易的web框架,在实战中我们不免要与数据库打交道,而我们日常使用的最为熟悉的操作mysql数据库的工具是pymysql,但该工具是原生处理数据库的工具包,在对数据库处理上无论从性能上还是友好性都存在很大弊端,我们需要写大量数据库语句,而sqlalchemy是基于orm面向对象思想的操作数据库框架,它把数据库中每个表当成一个对象,而字段就相当于对象里面的属性从而使得操作数据库更为简便快捷也容易理解。此处主要以操作mysql为例,从使用sqlalchemy创建数据库模型然后生成数据表到利用。
                                    from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer
dbUrls=basics.dbUrls()
engine = create_engine(dbUrls,echo=True,max_overflow=5)
#连接mysql数据库,echo为是否打印结果
Base = decl.
                                    模型一般是一个Python类,类中的属性对应数据库表中的列。Flask-SQLAlchemy创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。此外,Flask_SQLAlchemy 不是Python的内置模块,需要安装后才能使用。上述代码中,第一个root是数据库用户名,第二个root是数据库密码,最后面的flask是数据库名称。本实例中要实现创建MySQL数据表的功能,所以需要安装使用PyMySQL驱动。对较长或不限长度的字符串做了优化。
                                    场景应用老大我让爬取内部网站获取数据,插入到新建的表中,并每天进行爬取更新数据(后面做了定时任务)。然后根据该表统计每日的新增数量/更新数量进行制图制表,向上级汇报。思路构建选用sqlalchemy+mysqlconnector,连接数据库,创建表,对指定表进行crudfrom sqlalchemy import exists, column, integer, string, foreignke...
                                    在之前的学习笔记中讲了如何通过sqlalchemy来连接数据库,那么以此为前提我们通过sqlalchemy来创建数据库表,如果不知道的话请看Python学习笔记(1) 使用sqlalchemy连接mysql
# encoding: utf-8
from sqlalchemy import create_engine
HOSTNAME = "127.0.0.1"
PORT = "3306"