尝试使用 Flask SqlAlchemy event.listen.But 更改我的 table 中的自动递增起始值 event.listen.But 我遇到 table 不存在
Trying to change auto increment start value in my tables with Flask SqlAlchemy event.listen.But I am encountering table doesn't exist
models.py
#imports
class User(db.Model):
__tablename__ = 'userstore'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
password = db.Column(db.String(128))
role = db.Column(db.String(15))
created_on = db.Column(db.TIMESTAMP, default=datetime.now())
logged_in = db.Column(db.TIMESTAMP, nullable=True)
def set_password(self, password):
self.password = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password, password)
#Here i am trying to change autoincment vaue
event.listen(User.__table__,"after_create",db.engine.execute(""" ALTER TABLE userstore AUTO_INCREMENT = 100000001""")
)
Also tried to use DDL like
event.listen(User.__table__,"after_create", DDL(""" ALTER TABLE userstore AUTO_INCREMENT =100000001"""))
当使用 DDL 时,迁移 运行 没有任何错误,但 id 值仍然从 1 开始,这意味着上面 event.listen 内的 DDL 查询以某种方式未执行
app.py
#imports
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
from models import User, Patient,MedicineDetails
migrate = Migrate(app, db)
#route codes
if __name__ == '__main__':
app.run(debug=True)
Error after performing
flask db init
qlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1146 (42S02): Table 'hms.userstore' doesn't exist
[SQL: ALTER TABLE userstore AUTO_INCREMENT = 100000001]
(Background on this error at: http://sqlalche.me/e/f405)
这个问题:
event.listen(User.__table__,"after_create",db.engine.execute(""" ALTER TABLE userstore AUTO_INCREMENT = 100000001"""))
是 db.engine.execute()
调用将立即 运行,而不是在事件触发时。
我相信正确的版本是您的第二个版本,它会在创建 table 时导致 SQL 语句变为 运行。
event.listen(User.__table__,"after_create", DDL(""" ALTER TABLE userstore AUTO_INCREMENT =100000001"""))
运行 flask db init
不会导致创建任何 table。您将需要使用 flask db migrate
创建迁移,然后使用 flask db upgrade
执行迁移。只有在那个时候事件才会触发。
models.py
#imports
class User(db.Model):
__tablename__ = 'userstore'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True)
password = db.Column(db.String(128))
role = db.Column(db.String(15))
created_on = db.Column(db.TIMESTAMP, default=datetime.now())
logged_in = db.Column(db.TIMESTAMP, nullable=True)
def set_password(self, password):
self.password = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password, password)
#Here i am trying to change autoincment vaue
event.listen(User.__table__,"after_create",db.engine.execute(""" ALTER TABLE userstore AUTO_INCREMENT = 100000001""")
)
Also tried to use DDL like
event.listen(User.__table__,"after_create", DDL(""" ALTER TABLE userstore AUTO_INCREMENT =100000001"""))
当使用 DDL 时,迁移 运行 没有任何错误,但 id 值仍然从 1 开始,这意味着上面 event.listen 内的 DDL 查询以某种方式未执行
app.py
#imports
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
from models import User, Patient,MedicineDetails
migrate = Migrate(app, db)
#route codes
if __name__ == '__main__':
app.run(debug=True)
Error after performing
flask db init
qlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1146 (42S02): Table 'hms.userstore' doesn't exist
[SQL: ALTER TABLE userstore AUTO_INCREMENT = 100000001]
(Background on this error at: http://sqlalche.me/e/f405)
这个问题:
event.listen(User.__table__,"after_create",db.engine.execute(""" ALTER TABLE userstore AUTO_INCREMENT = 100000001"""))
是 db.engine.execute()
调用将立即 运行,而不是在事件触发时。
我相信正确的版本是您的第二个版本,它会在创建 table 时导致 SQL 语句变为 运行。
event.listen(User.__table__,"after_create", DDL(""" ALTER TABLE userstore AUTO_INCREMENT =100000001"""))
运行 flask db init
不会导致创建任何 table。您将需要使用 flask db migrate
创建迁移,然后使用 flask db upgrade
执行迁移。只有在那个时候事件才会触发。