zoukankan      html  css  js  c++  java
  • Python操作数据库基本操作-sqlalchemy

    使用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(category='%s', itemname='%s', idolname='%s', performtime='%s)>" % 
                   self.category, self.itemname, self.idolname, self.performtime

    一、插入单条数据

    建立数据库连接,根据连接初始化Session的参数,然后创建session对象,用session来进行数据记录的插入,最后提交此次操作:

    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
    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 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()

    这里插入的两条记录,

    1. 缺省了自增主键,这个会根据数据库的自增主键字段,自动设置主键

    2. 缺省了linkurl字段,这个会在数据库自动设置为NULL

    3. 其中一条记录的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("
    ").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()

    结果如下:

  • 相关阅读:
    舌尖上的中关村
    解决winform窗体闪烁问题
    24段魔尺,可以折出哪些精美图案(续)
    24段魔尺,可以折出哪些精美图案
    关于Python编程的一些问答
    BZOJ 1025: [SCOI2009]游戏
    BZOJ 1025: [SCOI2009]游戏
    BZOJ 1207: [HNOI2004]打鼹鼠
    BZOJ 1207: [HNOI2004]打鼹鼠
    BZOJ 1046: [HAOI2007]上升序列
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/15390364.html
Copyright © 2011-2022 走看看