zoukankan      html  css  js  c++  java
  • python+ sqlalchemy实现orm创建表和查询操作

    ORM连接错误

    错误码:python35libsite-packagespymysqlcursors.py:166: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 480")
      result = self._query(query)
    解决方案
    
    pip install mysql-connector-python
    pip install mysql
    pip install pymysql
    
    将连接引擎的:
    mysql+pymysql engine = create_engine("mysql+pymysql//user:password@host/{data_base}",encoding='utf-8') 
    修改为:
    mysql+mysqlconnector engine = create_engine("mysql+mysqlconnector//user:password@host/{data_base}",encoding='utf-8')
    就是将pymysql连接数据库换成了,官方的连接引擎!然后问题解决了!
    

    python+sqlalchemy实现查询

    from sqlalchemy import  create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String #区分大小写
    from sqlalchemy.orm import sessionmaker
    # 这里使用的是mysqlconnector 而没用使用pymysql,因为在是使用pymysql出现了错误报错
    # 转至https://www.cnblogs.com/shiqi17/p/9409228.html
    engine=create_engine("mysql+mysqlconnector://root:root@localhost/quey",encoding='utf-8',echo=True)
    #生成orm基类
    base=declarative_base()
    class user(base):
        __tablename__ = 'users' #表名
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
        password = Column(String(64))
    
    class class_name(base):
        __tablename__ = 'class'  # 表名
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
        password = Column(String(64))
        password1 = Column(String(64))
    
    base.metadata.create_all(engine) #创建表结构
    Session_class=sessionmaker(bind=engine) ##创建与数据库的会话,class,不是实例
    
    # #生成session实例
    Session = Session_class()
    # for i in range(0,10):
    #
    #     user_obj = user(name="{}".format(i),password="123456") #插入你要创建的数据对象,每执行一次都会新增一次数据。
    #     # print(user_obj.name,user_obj.id,'1111') #此时还没创建对象呢,不信你打印一下id发现还是None
    #
    #     Session.add(user_obj)#把要创建的数据对象添加到这个session里
    #     # print(user_obj.name,user_obj.id,'2222') #此时也依然还没创建
    #     Session.commit() #提交,使前面修改的数据生效
    
    # 只查询第一条记录
    result = Session.query(user).first()
    print(type(result.id),type(result.name),type(result.password))
    print("第一条查询结果:" + str(result.id),result.name,result.password)
    
    # 通过ID字段查询
    result = Session.query(user).filter_by(id=2).first()
    print("ID值查询结果:" + str(result.id),result.name,result.password)
    
    # 分页查询 0,2
    result = Session.query(user).filter(user.id>1).limit(5).offset(10).all()
    for i in result:
        print(i.id,i.name,i.password)
    # 根据主键查询
    result = Session.query(user).get(3)
    print(result.name)
    
    # 新增和修改
    # 新增
    news = user(name="我是",password="新增测试标题")
    Session.add(news)
    Session.commit()
    
    #修改
    Session.query(user).filter(user.id==7).update({"password":"修改之后的标题"})
    Session.commit()
  • 相关阅读:
    用C++实现斐波那契数列
    用C++实现的八皇后问题
    用C++实现的元胞自动机
    用C++实现的贪吃蛇游戏
    用C++实现的解数独(Sudoku)程序
    蓝桥杯-3.4
    汇编——实验9
    汇编——实验5
    汇编——实验4
    汇编——实验3
  • 原文地址:https://www.cnblogs.com/zhangyu-zhj/p/13198476.html
Copyright © 2011-2022 走看看