Connect to Oracle database using SQLALCHEMY

前端 未结 4 957
走了就别回头了
走了就别回头了 2020-12-24 08:24

I am able to successfully connect to a sqlite database and access a particular table using the set of commands below.

from sqlalchemy import create_engine, M         


        
相关标签:
4条回答
  • 2020-12-24 09:01

    Assuming you have the Oracle client on your machine with a valid tnsnames.ora file, this works for me:

    from sqlalchemy import create_engine
    import pandas as pd 
    engine = create_engine('oracle://myusername:mypassword@SID')
    con = engine.connect()
    outpt = con.execute("SELECT * FROM YOUR_TABLE")
    df = pd.DataFrame(outpt.fetchall())
    df.columns = outpt.keys()
    print(df.head())
    con.close() 
    
    0 讨论(0)
  • 2020-12-24 09:06

    This works for me, when there is no tnsnames.ora file.

    user = 'system'
    pwd = 'oracle'
    dsn = cx_Oracle.makedsn(
        '192.168.1.105', 49161,
        # service_name='your_service_name_if_any'
    )
    ora_engine = create_engine(f'oracle+cx_oracle://{user}:{pwd}@{dsn}', echo=True)
    ora_engine.connect()
    
    0 讨论(0)
  • 2020-12-24 09:14
    from sqlalchemy import create_engine
    import cx_Oracle
    
    host=hostname
    port=port
    sid='sid'
    user='username'
    password='password'
    sid = cx_Oracle.makedsn(host, port, sid=sid)
    
    cstr = 'oracle://{user}:{password}@{sid}'.format(
        user=user,
        password=password,
        sid=sid
    )
    
    engine =  create_engine(
        cstr,
        convert_unicode=False,
        pool_recycle=10,
        pool_size=50,
        echo=True
    )
    
    result = engine.execute('select * from TABLE')
    
    for row in result:
        print row
    

    This worked for me. A connection object can also be created like

    conn = engine.connect()
    conn.close()
    

    which will enable to close the connection. This works even if you have a tunnel to your remote DB from your local port.

    0 讨论(0)
  • 2020-12-24 09:22

    You don't need to import cx_Oracle anymore. The newer version of the sqlalchemy module calls the function cx_Oracle.makedsn(). Have a look:

    from sqlalchemy.engine import create_engine
    
    DIALECT = 'oracle'
    SQL_DRIVER = 'cx_oracle'
    USERNAME = 'your_username' #enter your username
    PASSWORD = 'your_password' #enter your password
    HOST = 'subdomain.domain.tld' #enter the oracle db host url
    PORT = 1521 # enter the oracle port number
    SERVICE = 'your_oracle_service_name' # enter the oracle db service name
    ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE
    
    engine = create_engine(ENGINE_PATH_WIN_AUTH)
    
    
    #test query
    import pandas as pd
    test_df = pd.read_sql_query('SELECT * FROM global_name', engine)
    
    0 讨论(0)
提交回复
热议问题