别慌,让我先缓缓 2023-05-12 00:11 采纳率: 86.7%
浏览 13
已结题

create_engine连接Access数据库出错,如何解决?(语言-python)

第一次时用create_engine来连接Aceess数据库报错,
engine = create_engine(f"microsoft+pyodbc:///?odbc_connect=Driver={{Microsoft Access Driver (.mdb,.accdb)}};DBQ={path1}")
运行后抱错
Can't load plugin: sqlalchemy.dialects:microsoft.pyodbc
有没有兄弟知道如何解决啊

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-12 02:06
    关注
    • 这篇博客: [1024]python sqlalchemy中create_engine用法中的 使用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      • 下面mysql作为例子
      yconnect = create_engine('mysql+mysqldb://root:password@host:port/db?charset=utf8')  
      pd.io.sql.to_sql(DataResultDF,'tablename', yconnect, schema='db', if_exists='append')   
      
      • 创建表结构

      使用 Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 进行数据库操作。Engine使用Schema Type创建一个特定的结构对象,之后通过SQL Expression Language将该对象转换成SQL语句,然后通过 ConnectionPooling 连接数据库,再然后通过 Dialect 执行SQL,并获取结果。

      from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
      import MySQLdb
      
      
      #创建数据库连接
      engine = create_engine("mysql+mysqldb://liuyao:liuyao@121.42.195.15:3306/db_name", max_overflow=5)
      # 获取元数据
      metadata = MetaData()
      # 定义表
      user = Table('user', metadata,
          Column('id', Integer, primary_key=True),
          Column('name', String(20)),
          )
       
      color = Table('color', metadata,
          Column('id', Integer, primary_key=True),
          Column('name', String(20)),
          )
      #将dataframe 添加到 tmp_formidinfo 如果表存在就添加,不存在创建并添加 
      pd.io.sql.to_sql(DataResultDF,'tmp_formidinfo',engine, schema='db_name', if_exists='append')                
       
      # 执行sql语句
      engine.execute(
          "INSERT INTO db_name.color(id, name) VALUES ('1', 'liuyao');"
      )
      result = engine.execute('select * from color')
      print(result.fetchall())
      
      -----------------------------------------------------------------------------------
      sql = 'select * from customer2018;'
      df = pd.read_sql_query(sql, engine)
      # read_sql_query的两个参数: sql语句, 数据库连接
      df = pd.read_sql_query(sql, engine)
      print(df)
      

      create_engine 还有很多可选参数,这里介绍几个重要的参数

      engine=create_engine('mysql://user:password@localhost:3306/test?charset=utf8mb4',
      echo=False,pool_size=100,pool_recycle=3600,pool_pre_ping=True)
      
      • echo :为 True 时候会把sql语句打印出来,当然,你可以通过配置logger来控制输出,这里不做讨论。
      • pool_size: 是连接池的大小,默认为5个,0表示连接数无限制
      • pool_recycle: MySQL 默认情况下如果一个连接8小时内容没有任何动作(查询请求)就会自动断开链接,出现 MySQL has gone away的错误。设置了 pool_recycle 后 SQLAlchemy 就会在指定时间内回收连接。如果设置为3600 就表示 1小时后该连接会被自动回收。
      • pool_pre_ping : 这是1.2新增的参数,如果值为True,那么每次从连接池中拿连接的时候,都会向数据库发送一个类似 select 1 的测试查询语句来判断服务器是否正常运行。当该连接出现 disconnect 的情况时,该连接连同pool中的其它连接都会被回收。

      参考:https://blog.csdn.net/P01114245/article/details/89918197
      https://www.jianshu.com/p/f039da1d90ce
      https://www.jb51.net/article/164591.htm

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 5月12日