3.1 問題
分別在部門表、員工表和工資表中加入數據
通過SQLAlchemy代碼實現
分別練習每次加入一行數據和每次可加入多行數據
3.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:向部門表添加數據,創建add_department.py文件,添加如下代碼:
1)創建映射類的實例
[root@localhost day10]# vim add_department.py
from dbconn import Departments
hr = Departments(dep_id=1, dep_name='hr')
print(hr.dep_name)
print(hr.dep_id)
測試執行結果:
[root@localhost day10]# python3 add_department.py
hr
1
登錄數據庫查看,部門表中數據爲空,此時,並不會真正在數據庫表中添加記錄
MariaDB [tarena]> select * from departments;
Empty set (0.00 sec)
- 想在數據庫中添加數據需完成如下操作,創建會話類
在dbconn.py文件中,添加如下代碼:
通過將sessionmaker與數據庫引擎綁定,創建會話類Session
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
3)添加新對象
在add_department.py文件中添加如下代碼:
from dbconn import Departments, Session
session = Session() #創建會話類實例
session.add(hr) #向實例綁定的數據庫添加數據
session.commit() #將數據提交到實例對應數據庫
session.close() #關閉session類
測試執行結果:
[root@localhost day10]# python3 add_department.py
登錄數據庫查看部門表中數據
MariaDB [tarena]> select * from departments;
+--------+----------+
| dep_id | dep_name |
+--------+----------+
| 1 | hr |
+--------+----------+
1 row in set (0.01 sec)
數據成功添加
4)批量添加新數據
在add_department.py文件中添加如下代碼:
ops = Departments(dep_id=2, dep_name='operations')
dev = Departments(dep_id=3, dep_name='development')
finance = Departments(dep_id=4, dep_name='財務部')
deps = [ops, dev]
session = Session()
session.add_all(deps)
session.add(finance)
session.commit()
session.close()
此時注意:
添加過的數據不要再添加,即將session.add(hr)註釋掉。
如果文件中有中文,注意在dbconn.py文件中,將engine的參數修改爲如下代碼:
engine=create_engine(
'mysql+pymysql://root:tedu.cn@localhost/tarena?charset=uU8',
encoding='uU8',
echo=True
)
測試執行結果:
[root@localhost day10]# python3 add_department.py
登錄數據庫查看部門表中數據
MariaDB [tarena]> select * from departments;
+--------+-------------+
| dep_id | dep_name |
+--------+-------------+
| 3 | development |
| 1 | hr |
| 2 | operations |
| 4 | 財務部 |
+--------+-------------+
4 rows in set (0.00 sec)
數據成功添加
步驟二:向員工表批量添加數據,創建add_employees.py文件,添加如下代碼:
from dbconn import Employees, Session
wj = Employees(
emp_id=1,name='王俊',gender='男',phone='15678789090',email='[email protected]', dep_id=3
)
wwc = Employees(
emp_id=2,name='吳偉超',gender='男',phone='13499887755',email='[email protected]', dep_id=3
)
dzj = Employees(
emp_id=3, name='董枝俊', gender='男', phone='18900998877', email='[email protected]', dep_id=3
)
ltd = Employees(
emp_id=4, name='李通達', gender='男', phone='13378904567', email='[email protected]', dep_id=2)
wxy = Employees(
emp_id=5, name='王秀燕', gender='女', phone='15098765432', email='[email protected]', dep_id=2)
gq = Employees(
emp_id=6, name='高琦', gender='女', phone='15876543212', email='[email protected]', dep_id=1)
wzf = Employees(
emp_id=7, name='王召飛', gender='男', phone='15609871234', email='[email protected]', dep_id=1)
sy = Employees(
emp_id=8, name='孫燕', gender='女', phone='18567895435', email='[email protected]', dep_id=4)
gpf = Employees(
emp_id=9, name='高鵬飛', gender='男', phone='13566889900', email='[email protected]', dep_id=2)
emps = [wj, wwc, dzj, ltd, wxy, gq, wzf, sy, gpf]
session = Session()
session.add_all(emps)
session.commit()
session.close()
測試執行結果:
[root@localhost day10]# python3 add_employees.py
登錄數據庫查看部門表中數據
MariaDB [tarena]> select * from employees;
+--------+-----------+--------+-------------+---------------+--------+
| emp_id | name | gender | phone | email | dep_id |
+--------+-----------+--------+-------------+---------------+--------+
| 1 | 王俊 | 男 | 15678789090 | [email protected] | 3 |
| 2 | 吳偉超 | 男 | 13499887755 | [email protected] | 3 |
| 3 | 董枝俊 | 男 | 18900998877 | [email protected] | 3 |
| 4 | 李通達 | 男 | 13378904567 | [email protected] | 2 |
| 5 | 王秀燕 | 女 | 15098765432 | [email protected] | 2 |
| 6 | 高琦 | 女 | 15876543212 | [email protected] | 1 |
| 7 | 王召飛 | 男 | 15609871234 | [email protected] | 1 |
| 8 | 孫燕 | 女 | 18567895435 | [email protected] | 4 |
| 9 | 高鵬飛 | 男 | 13566889900 | [email protected] | 2 |
+--------+-----------+--------+-------------+---------------+--------+
9 rows in set (0.00 sec)
數據成功添加
步驟三:向工資表添加數據,創建add_ salary.py文件,添加如下代碼:
from dbconn import Salary, Session
jan2018_1 = Salary(date='2018-01-10', emp_id=1, basic=10000, awards=2000)
jan2018_2 = Salary(date='2018-01-10', emp_id=2, basic=11000, awards=1500)
jan2018_3 = Salary(date='2018-01-10', emp_id=3, basic=11000, awards=2200)
jan2018_4 = Salary(date='2018-01-10', emp_id=4, basic=11000, awards=3000)
jan2018_5 = Salary(date='2018-01-10', emp_id=1, basic=13000, awards=2000)
jan2018_6 = Salary(date='2018-01-10', emp_id=6, basic=15000, awards=3000)
jan2018_7 = Salary(date='2018-01-10', emp_id=7, basic=9000, awards=3000)
jan2018_8 = Salary(date='2018-01-10', emp_id=8, basic=13000, awards=2000)
jan2018_9 = Salary(date='2018-01-10', emp_id=9, basic=13000, awards=1500)
session = Session()
sals = [jan2018_1, jan2018_2, jan2018_3,jan2018_4, jan2018_5, jan2018_6, jan2018_7, jan2018_8, jan2018_9]
session.add_all(sals)
session.commit()
session.close()
測試執行結果:
[root@localhost day10]# python3 add_ salary.py
登錄數據庫查看部門表中數據
MariaDB [tarena]> select * from salary;
+---------+------------+--------+-------+--------+
| auto_id | date | emp_id | basic | awards |
+---------+------------+--------+-------+--------+
| 1 | 2018-01-10 | 1 | 10000 | 2000 |
| 2 | 2018-01-10 | 2 | 11000 | 1500 |
| 3 | 2018-01-10 | 3 | 11000 | 2200 |
| 4 | 2018-01-10 | 4 | 11000 | 3000 |
| 5 | 2018-01-10 | 1 | 13000 | 2000 |
| 6 | 2018-01-10 | 6 | 15000 | 3000 |
| 7 | 2018-01-10 | 7 | 9000 | 3000 |
| 8 | 2018-01-10 | 8 | 13000 | 2000 |
| 9 | 2018-01-10 | 9 | 13000 | 1500 |
+---------+------------+--------+-------+--------+
9 rows in set (0.00 sec)
數據成功添加