使用 Sequelize
使用 Sync 同步 table
因為有時會出現更換 server 環境後 table 不存在情況,Sequelize 會自動 sync 寫好的 model schema 到 DB table。但要記得在初始化 server 前,引入 model,順序不同可能會產生創建
table 錯誤。
sync({force: true}) 會把表裡面的資料都刪除整個 table truncate 後重新創建 table。另外如果還沒有 table 的情況使用 sync({force: true}) 可能無法正確創建,在沒有表的時候建議使用 sync({force: false}) ,如果是修改 schema 可以用 sync({alter: true})
記得正式環境不要用
{force: true}
https://sequelize.org/docs/v7/models/model-synchronization/
程式範例:
1.創建 /database/connect.js
const { Sequelize } = require('sequelize');
const dotenv = require("dotenv"); // Import dotenv
dotenv.config(); // Load environment variables from .env file
// Initialize Sequelize with your MySQL connection details
const { DB_USER, DB_PASS, DB_HOST } = process.env;
const sequelize = new Sequelize('db_name', DB_USER, DB_PASS, {
host: DB_HOST,
dialect: 'mysql',
logging: false,
});
module.exports = sequelize;2.創建 /database/models/user.js
創建資料
使用 Transaction
記得整段內的 find, create,update 等都要放入 transaction。
最後使用 commit 確認,或用 rollback 回覆全部狀態。
注意事項
const user = findOne() 後獲取到的 user,可以直接使用 user.name = ...,之後用 user.save(),但如果是數字不能用 user.num += ...
decimal 型態取出為 string,但存入到 decimal 時可以使用 string or number
decimal 建議指定長度,例如
type: DataTypes.DECIMAL(40, 20)使用 transaction 時,會發生無法在 transaction 中途 create data 然後立即 access 的情況
使用 findOrCreate 獲取的 instance 無法使用 .save
Last updated
Was this helpful?