conn = cx_Oracle.connect('username/password@ip:port/servername')
cur = conn.cursor()
cur.execute('SELECT * FROM "db"."table"')
cur是一个迭代器,不要用fetchall一次性取完數據
直接 for row in cur 即可取数据
使用:sqlalchemy
MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
create_engine('oracle+cx_oracle://{a}:{b}@{c}:{d}/?service_name={e}'.format(a,b,c,d,e))
create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s/%(database)s?charset=utf8' % laoshifu_info)
1. df = pd.read_sql_table(table_name="table_name", con=engine)
(the function to_sql is case-sensitive,Found the root cause from DBMS (mysql) autoconvert the table name to lowercase.)
2. df = pd.read_sql_query(sql=sql,con=engine) # 很慢
3.
ordf = pd.read_sql("SELECT * FROM db.table ",engine,chunksize=50000)
dflist = []
for chunk in ordf:
dflist.append(chunk)
df = pd.concat(dflist)