sqlalchemy 建立表並設定預設值

2021-10-19 19:15:17 字數 3490 閱讀 3521

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...