Prechádzať zdrojové kódy

mysql数据库连接

Sherlock 1 rok pred
rodič
commit
15c0f56323

+ 5 - 0
config/__init__.py

@@ -1,2 +1,7 @@
 #!/usr/bin/env python3
 # -*- coding:utf-8 -*-
+from config import database_config
+
+__all__ = [
+    "database_config"
+]

BIN
config/__pycache__/__init__.cpython-38.pyc


BIN
config/__pycache__/database_config.cpython-38.pyc


+ 4 - 0
dao/__init__.py

@@ -1,2 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding:utf-8 -*-
+from dao.mysql_client import Mysql
+__all__ = [
+    "Mysql"
+]

BIN
dao/__pycache__/__init__.cpython-38.pyc


BIN
dao/__pycache__/mysql_client.cpython-38.pyc


+ 34 - 19
dao/mysql_client.py

@@ -5,6 +5,7 @@ from sqlalchemy.dialects.mysql import pymysql
 from sqlalchemy.orm import sessionmaker
 from sqlalchemy.ext.declarative import declarative_base
 from config import database_config
+import pandas as pd
 
 
 class Mysql(object):
@@ -14,30 +15,44 @@ class Mysql(object):
         user = database_config.MYSQL_USER
         passwd = database_config.MYSQL_PASSWD
         dbname = database_config.MYSQL_DB
-        self.engine = self._connect(host, port, user, passwd, dbname)
-        self.engine = create_engine(self.engine)
+        
+        # 通过连接池创建engine
+        self.engine = create_engine(
+            self._connect(host, port, user, passwd, dbname),
+            pool_size=10, # 设置连接池大小
+            max_overflow=20, # 超过连接池大小时的额外连接数
+            pool_recycle=3600 # 回收连接时间
+        )
         self._DBSession = sessionmaker(bind=self.engine)
 
     def _connect(self, host, port, user, pwd, db):
-        client = "mysql+pymysql://" + user + ":" + pwd + "@" + host + ":" + str(port) + "/" + db
-        return client
+        try:
+            client = "mysql+pymysql://" + user + ":" + pwd + "@" + host + ":" + str(port) + "/" + db
+            return client
+        except Exception as e:
+            raise ConnectionError(f"failed to create connection string: {e}")
+        
+    def create_session(self):
+        """创建返回一个新的数据库session"""
+        return self._DBSession()
 
-    @property
-    def DBSession(self):
-        return self._DBSession
+    def closed(self):
+        """关闭连接,回收资源"""
+        self.engine.dispose()
 
 
 if __name__ == '__main__':
     client = Mysql()
-    sess = client.DBSession()
-    sql_tables = text("show tables")
-    for table in sess.execute(sql_tables).all():
-        print(table[0])
-        sql = text("""
-            SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT
-            FROM INFORMATION_SCHEMA.COLUMNS
-            WHERE TABLE_NAME = :table_name;
-        """)
-        info = sess.execute(sql, {"table_name": table[0]})
-        for tb in info:
-            print(tb)
+    # 创建会话
+    session = client.create_session()
+    
+    # 使用 session 执行查询等操作
+    try:
+        results = session.execute(
+            text("select * from tads_brandcul_cust_order")
+            ).mappings().all()
+        # 将结果转换为DataFrame
+        df = pd.DataFrame(results) # 提取列名
+        print(df)
+    finally:
+        session.close()