使用sqlalchemy,不仅要安装sqlalchemy库,还要安装pymysql
连接数据库很简单,使用一行简短的程序即可
from sqlalchemy import create_engine
import pandas as pd
def sqlalchemy_test():
ENGINE = create_engine("mysql+pymysql://root:zksmysql@127.0.0.1:3306/asoul")
# 查询2021年9月30日之后的所有item
sql = """
select iditem,itemname,performtime from item where performtime>'2021-9-30'
order by performtime desc
"""
df = pd.read_sql(sql, ENGINE)
print(df)
if __name__ == '__main__':
sqlalchemy_test()
然后就查询成功,打印数据框,也可以换成自己的查询语句进行数据库连接测试。
关键的是插入数据,这里有如下的数据表
一个int类型自增主键,一个DATETIME类型的日期,其他四个String类型
有如下数据:
该数据有三列,分别对应category、itemname、performtime,其中performtime有一些空字段。
现在目标是将一下数据插入到上述表item中。
首先,在python文件中定义表Item的映射(创建表):格式如下
from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_bas
import pandas as pd
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
iditem = Column(Integer, primary_key=True)
category = Column(String(32))
itemname = Column(String(64))
idolname = Column(String(16))
performtime = Column(DateTime)
linkurl = Column(String(128))
def __repr__(self):
return "item'
iditem = Column(Integer, primary_key=True)
category = Column(String(32))
itemname = Column(String(64))
idolname = Column(String(16))
performtime = Column(DateTime)
linkurl = Column(String(128))def insert_into_table():
ENGINE = create_engine("mysql+pymysql://root:zksmysql@127.0.0.1:3306/asoul")
Base.metadata.create_all(ENGINE)
Session = sessionmaker(bind=ENGINE)
session = Session()
session.add(Item(category="歌", itemname="胡广生", idolname="珈乐Carol", performtime=None))
session.add(Item(category="歌", itemname="七里香", idolname="珈乐Carol", performtime="2021-2-14"))
session.commit()
if __name__ == '__main__':
insert_into_table()
这里插入的两条记录,
-
缺省了自增主键,这个会根据数据库的自增主键字段,自动设置主键
-
缺省了linkurl字段,这个会在数据库自动设置为NULL
-
其中一条记录的performtime字段设置为None,这个会自动在数据库设置为NULL
结果如下:
二、批量插入记录
读取文件,将每一行数据创建为一个Item对象。然后调用session的add_all函数一次性全部插入数据库,对于空字段需要进行判断
from sqlalchemy import create_engine
from sqlalchemy import Column
from sqlalchemy import Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
iditem = Column(Integer, primary_key=True)
category = Column(String(32))
itemname = Column(String(64))
idolname = Column(String(16))
performtime = Column(DateTime)
linkurl = Column(String(128))
def insert_into_table():
# 将数据的每一行创建为一个Item对象
data = []
with open("temp.csv", encoding='utf-8') as file:
line = file.readline()
while line:
line_s = line.strip("\n").split(',')
if line_s[2] == '':
data.append(Item(category=line_s[0], itemname=line_s[1], idolname="珈乐Carol"))
else:
data.append(Item(category=line_s[0], itemname=line_s[1], idolname="珈乐Carol", performtime=line_s[2]))
line = file.readline()
# 建立连接,创建session,提交数据
ENGINE = create_engine("mysql+pymysql://root:zksmysql@127.0.0.1:3306/asoul")
Base.metadata.create_all(ENGINE)
Session = sessionmaker(bind=ENGINE)
session = Session()
session.add_all(data)
session.commit()
if __name__ == '__main__':
insert_into_table()
结果如下:
Original: https://www.cnblogs.com/zhaoke271828/p/15390364.html
Author: Viktor_Cullen
Title: Python操作数据库基本操作-sqlalchemy
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/566020/
转载文章受原作者版权保护。转载请注明原作者出处!