models.py
# -*- coding: utf-8 -*-
import datetime
from sqlalchemy import column, string, integer, char, timestamp
from sqlalchemy.ext.declarative import declarative_base
# 建立物件的基類
base = declarative_base()
class basemodel(base):
"""資料基礎類
"""__abstract__ = true
id = column(integer, primary_key=true, autoincrement=true)
is_delete = column(integer, default=0, server_default='0')
create_time = column(datetime, nullable=false, server_default=text("current_timestamp"))
# 自動更記錄時間戳 需要設定nullable=false
update_time = column(timestamp, nullable=false)
class user(basemodel):
# 表的名字
__tablename__ = 'users'
# 表的結構
name = column(string(20), nullable=false)
age = column(integer, nullable=false)
*** = column(char(1), nullable=false)
def __init__(self):
super().__init__()
main.py
from models import *
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://root:1998423@localhost:3306/lianxi')
#建立表
base.metadata.create_all(engine)
然後,當我們使用flask-sqlalchemy 的時候models.py是這樣:
# -*- coding: utf-8 -*-
import datetime
from flask_sqlalchemy import sqlalchemy
# 這句最好是寫在另外乙個檔案裡面方便進行呼叫
db = sqlalchemy()
class basemodel(object):
"""資料基礎類
"""id = db.column(db.integer, primary_key=true, autoincrement=true)
is_delete = db.column(db.boolean, default=false)
create_time = db.column(db.datetime(6), default=datetime.datetime.now)
update_time = db.column(db.datetime(6), default=datetime.datetime.now, onupdate=datetime.datetime.now)
額外知識點:
sqlalchemy 執行sql語句
from sqlalchemy import create_engine, text
engine = create_engine('mysql+mysqlconnector://root:1998423@localhost:3306/lianxi')
with engine.connect() as conn:
# 宣告乙個事務塊, 也可不宣告,若不宣告則共同使用同乙個事務塊
trans = conn.begin()
try:
conn.execute(text("drop table if exists `some_table`"))
conn.execute(text("create table some_table (x int, y int)"))
conn.execute(text("insert into some_table (x, y) values (:x, :y)"),[, ])
result = conn.execute(text("select * from some_table"))
for index, row in enumerate(result):
print(f"x: y: ")
trans.commit()
except:
trans.rollback()
print('error')
raise
sqlalchemy 動態建立表
from sqlalchemy import column, string, integer, char, timestamp, enum, text, datetime
from sqlalchemy.ext.declarative import declarative_base
# 建立物件的基類
base = declarative_base()
class table_model_cls(base):
__abstract__ = true # 關鍵語句,定義所有資料庫表對應的父類
__table_args__ = # 允許表已存在
id = column(integer, primary_key=true)
username = column(string(24), nullable=false)
password = column(string(16), nullable=false, server_default='123456')
def get_table_model_cls(cid, cid_class_dict={}):
print(1234, cid_class_dict)
if cid not in cid_class_dict:
cls_name = table_name = cid
cls = type(cls_name, (table_model_cls,), )
cid_class_dict[cid] = cls
return cid_class_dict[cid]
table = get_table_model_cls('table_name')
參考: sqlalchemy根據表名動態建立model類
sqlalchemy根據表名動態建立model類 作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,in...
sqlalchemy根據表名動態建立model類
作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,integer,metadata,string,tab...
SQLAlchemy連線資料庫建立表
連線資料庫,建立表 defcreate all engine create engine mysql pymysql max overflow 0,超過連線池大小外最多建立的連線 pool size 5,連線池大小 pool timeout 30,池中沒有執行緒最多等待的時間,否則報錯 pool r...