sqlalchemy ORM進階- 批量插入數據


 

參考:

https://www.jb51.net/article/49789.htm

https://blog.csdn.net/littlely_ll/article/details/82706874

 

1 import pandas as pd
2 import sqlalchemy
3 
4 df = pd.DataFrame()
5 print(df)

結果:

1 Empty DataFrame
2 Columns: []
3 Index: []

 

插入1條數據

 

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer,Float,TIMESTAMP

from demo.demogetConnection import GetConnection

session = GetConnection.session
# engine =GetConnection.engine

Base = declarative_base()
class User(Base):
    __tablename__="user"
    id = Column(Integer,primary_key=True)
    name = Column(String(45))

    def __repr__(self):
        return "<User(id='%s',name='%s')>"%(self.id,self.name)

#插入單條數據:
new_user = User(name='lily')
#添加數據,但還沒有提交,出錯還可以使用rollback撤回操作
session.add(new_user)
#提交到數據,這一步才是真正的將數據插入到數據庫中了
session.commit()

結果

 

利用pandas批量插入數據

方式一:使用pandas_obj.to_sql()

 1 import pandas as pd
 2 import sqlalchemy
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy import Column,String,Integer,Float,TIMESTAMP

 8 
 9 from demo.demogetConnection import GetConnection
10 
11 session = GetConnection.session
12 engine =GetConnection.engine
13 
14 Base = declarative_base()
15 class User(Base):
16     __tablename__="user"
17     id = Column(Integer,primary_key=True)
18     name = Column(String(45))
19 
20     def __repr__(self):
21         return "<User(id='%s',name='%s')>"%(self.id,self.name)
22 
23 
24 
25 df = pd.DataFrame({"name":["Jon","Mary","Tom"]})
26 df.to_sql("user",con=engine,if_exists="append",index=False)

 

 在使用to_sql時注意if_exists參數,如果是replace的話它會先drop掉表,然后再創建表,最后插入數據

結果:

 

第2種方法,使用for循環

 1 import sqlalchemy
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy import Column,String,Integer,Float,TIMESTAMP
 4 
 5 from demo.demogetConnection import GetConnection
 6 
 7 session = GetConnection.session
 8 engine =GetConnection.engine
 9 
10 Base = declarative_base()
11 class User(Base):
12     __tablename__="user"
13     id = Column(Integer,primary_key=True)
14     name = Column(String(45))
15 
16     def __repr__(self):
17         return "<User(id='%s',name='%s')>"%(self.id,self.name)
18 
19 
20 #原生方法,批量插入
21 a=[]
22 for i in range(3):
23     a.append({"name":"曹操%s"%i})
24 
25 print(a)
26 session.execute(User.__table__.insert(),a)
27 session.commit()

打印的a的結果:

[{'name': '曹操0'}, {'name': '曹操1'}, {'name': '曹操2'}]

查詢表的結果,已經插入成功了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM