November 2016 Rocket UniVerse And . - Rocket Software

Transcription

Rocket UniVerse and UniDataU2 Python User GuideVersion 11.3.1Version 8.2.0November 2016UDT-820-UNV-1131-PYRG-1

NoticesEditionPublication date: November 2016Book number: UDT-820-UNV-1131-PYRG-1Product version: Version 11.3.1Copyright Rocket Software, Inc. or its affiliates 2015-2016. All Rights Reserved.TrademarksRocket is a registered trademark of Rocket Software, Inc. For a list of Rocket registered trademarks goto: www.rocketsoftware.com/about/legal. All other products or services mentioned in this documentmay be covered by the trademarks, service marks, or product names of their respective owners.ExamplesThis information might contain examples of data and reports. The examples include the names ofindividuals, companies, brands, and products. All of these names are fictitious and any similarity tothe names and addresses used by an actual business enterprise is entirely coincidental.License agreementThis software and the associated documentation are proprietary and confidential to Rocket Software,Inc. or its affiliates, are furnished under license, and may be used and copied only in accordance withthe terms of such license.Note: This product may contain encryption technology. Many countries prohibit or restrict theuse, import, or export of encryption technologies, and current use, import, and export regulationsshould be followed when exporting this product.2

Corporate informationRocket Software, Inc. develops enterprise infrastructure products in four key areas: storage, networks,and compliance; database servers and tools; business information and analytics; and applicationdevelopment, integration, and modernization.Website: www.rocketsoftware.comRocket Global Headquarters77 4th Avenue, Suite 100Waltham, MA 02451-1468USATo contact Rocket Software by telephone for any reason, including obtaining pre-sales informationand technical support, use one of the following telephone numbers.CountryToll-free telephone numberUnited 295Japan0800-170-5464Netherlands0-800-022-2961New Zealand0800-003210South Africa0-800-980-818United Kingdom0800-520-0439Contacting Technical SupportThe Rocket Customer Portal is the primary method of obtaining support. If you have current supportand maintenance agreements with Rocket Software, you can access the Rocket Customer Portal andreport a problem, download an update, or read answers to FAQs. To log in to the Rocket CustomerPortal or to request a Rocket Customer Portal account, go to www.rocketsoftware.com/support.In addition to using the Rocket Customer Portal to obtain support, you can use one of the telephonenumbers that are listed above or send an email to support@rocketsoftware.com.3

ContentsNotices. 2Corporate information. 3Chapter 1: Introduction to U2 Python. 6About U2 Python.6The Python integration. 6ECL/TCL integration.7UniBasic integration. 7The u2py extension module. 7Chapter 2: Installing U2 Python. 8U2 Python licensing.8Operating system requirements. 8.pth configuration files. 9.pyconfig file.9Applicable platforms. 9Changing the location of the Python installation (Windows).10Modifying the PATH variable (Linux).10Using other versions of Python with U2. 10Finding what version of Python is installed. 11Chapter 3: Accessing Python from U2.12The PYTHON command.12The RUNPY command. 12UniBasic Python API. 13PYOBJECT.13@variables. 13PyCall function.14PyCallFunction function.14PyCallMethod function. 14PyGetAttr function. 15PyImport function.15PySetAttr function. 15Passing number and string variables to Python functions.16Calling Python functions from a U2 BASIC Program.16Example 1: FINDWAREHOUSE PYFUNC. 17Example 2: SENDALERT PYFUNC. 21Example 3: LARGENUM TEST. 23Chapter 4: Writing Python programs that access U2.25u2py functionality.25Importing u2py. 25Accessing u2py help. 25Accessing u2py object attributes. 26Calling UniBasic cataloged subroutines. 27Running U2 TCL and ECL commands. 27Reading and writing U2 files.28Handling U2 dynamic arrays. 28Managing U2 SELECT lists.29Controlling U2 transactions. 29Python and NLS. 29U2 native encoding.30Examples. 30Accepting input from the DATA statement.304

ContentsSetting up parameters in a U2 process. 315

Chapter 1: Introduction to U2 PythonRocket U2 has extended the database language capabilities to include the use of Python, a dynamicand modern object-oriented programming language. The integration of Python and U2 allows you toprogram backend database logic with high extensibility in a language that supports the developmentof new applications based on U2.Note: This document assumes you know about the Python programming language. For moreinformation about how to use the Python language itself, see https://www.python.org.The choice of Python among many other modern programming language candidates was made onseveral factors, including how open the language platform is (meaning there is formal support forextending and embedding the language), the availability of third-party packages and the size of itsdevelopment communities, how steep the learning curve is, and so on. The integration betweenPython and U2 is one that allows Python to stand on its own as a U2 application developmentlanguage in addition to being a complimentary one to UniBasic.Throughout this document, the integration of Python and U2 is referred to as U2 Python.Note: Supplementary videos are available to help you learn about U2 Python. To watch theoverview video, click here. To learn how to use the RUNPY and PYTHON commands, click here.About U2 PythonU2 Python has the capability to access U2 resources such as data, subroutines, query tools, and so on.U2 applications can invoke Python code, be it third-party or locally made, to perform various tasksthat are difficult or even impossible to do in UniBasic.This approach requires two tasks be accomplished by C function calls so that there is no need for anyinterprocess-communication: The U2 server and the Python interpreter run in the same process The interaction between the U2 server and the Python interpreterAt this release, only strings, numbers, and Python object references can be passed between U2 andPython.The Python integrationU2 Python integrates into ECL/TCL and UniBasic. In ECL/TCL, two new commands have been added:RUNPY and PYTHON. In UniBasic, a set of functions and @variables have been updated. The u2pyextension module is available as a well-defined C API for writing new built-in modules to Python.Since Python does not reload any module already imported, in order to always call the latest Pythoncode each time the PYTHON, RUNPY, or RUN commands are used, the Python environment isreinitialized after the commands are finished.6

ECL/TCL integrationWarning: Although rare, if the Python module does not support reinitialization, such as thePython imaging library's image module, when the module is imported the second time, a warningor error message, unexpected exit, or corruption can occur in the UniVerse or UniData session.Instead, use the SH or DOS command to enter the operating system prompt, then start anotherUniVerse or UniData session to perform the command.ECL/TCL integrationTwo new commands, PYTHON and RUNPY, have been added at the ECL/TCL level. PYTHON: At the ECL/TCL prompt, run this command to launch into Python’s interactive shell andexecute Python commands just as you would with the U2 SQL prompt to run SQL commands. RUNPY: Run a Python program from ECL/TCL. U2 files can be used to store Python programs aswell as UniBasic programs.UniBasic integrationA set of functions and @variables allow you to run a Python program from within UniBasic, passingdata back and forth with the Python program.For more information about the API, see UniBasic Python API, on page 13.The u2py extension modulePython provides a well-defined C API for writing new built-in modules to Python. Such extensionmodules can do two things that cannot be done directly in Python: they can implement new built-inobject types, and they can call C library functions and system calls.u2py is one such extension module for Python that makes use of the modified UniObjects API toprovide access to various aspects of the U2 server, such as direct U2 file access, transaction control,UniBasic subroutine calls, and so on. The original UniObjects API is used for client/server/middlewareproducts of U2. For U2 Python, the UniObjects API has been refactored to make it usable by Cprograms on the server side.For a detailed description of the functionalities of u2py module, including functions, classes, globaldefinitions, enter help(u2py) at a Python prompt, as described in u2py functionality, on page 25.7

Chapter 2: Installing U2 PythonU2 Python version 3.4.1 is a default installation version bundled with this release. This version ofPython was used in Rocket development and testing environments, and has passed minimum testingrequirements. Other versions of Python have not been tested and should you attempt to use a laterversion of Python with your installation, Rocket support will only be able to provide assistance withissues encountered if they are reproduced with the default U2 Python installation.Separate Python installations are also not supported, though should you use a separate installation ofPython, we recommend that any separate Python version installed should be at the same release asthe version supplied with U2 (for example Python version 3.4.1 with UniVerse 11.3.1). Other versionsmight not be able to utilize U2 functionality due to changes in the Python APIs and interfaces.Note: All examples in this document are included with the XDEMO account version 3.1.0 or later.By default, U2 Python is installed together with the U2 server under the python directory in UDTHOME or UVHOME.For specific steps about installing UniVerse or UniData, see the Installation Guide.U2 Python licensingThe Python add-on must be licensed in UniVerse or UniData in order for it to be used.To license U2 Python on UniVerse or UniData, perform one of the following actions: On Windows platforms, select the Python check box during installation. In XAdmin, from the Admin Tasks pane, double-click License. From the Update tab, click thePYTHON check box, or use the wizard and select PY. (UniVerse) On Linux platforms, add PY:1 to the Linux license screen on the package line. (UniVerse) On either Windows or Linux platforms, using uvregen, enter bin/uvregen -pPY:1 in UVHOME.(UniData) On Linux platforms, change the package line in confprod to Y.(UniData) On either Windows or Linux platforms, using confcmd, enter confcmd -l PY:Y.Whenever Python is used in a U2 process, the Python library is loaded into memory and UniVerse orUniData checks whether a license is already consumed for that U2 process. A non-phantom processmust have already acquired a license for the check to succeed, and the loading of the Python libraryis allowed to continue. If a phantom process is already charged for an I-phantom license, then thecheck succeeds as well and the loading of the Python library is allowed to proceed. For a phantomprocess that has taken no license, UniVerse or UniData tries to acquire an I-phantom license for it andif successful, then the process is allowed to continue; if unsuccessful, an error occurs and prints to theassociated PH file and the process terminates.Operating system requirementsFor U2 Python to work on your operating system, make sure the location of any .pth configurationfiles and the .pyconfig file are placed in the correct directories.8

.pth configuration files.pth configuration filesFor the u2py extension module to be loadable in Python, the u2.pth file is placed in specificdirectories under the bundled Python installation directory: On Windows for UniData, UDTHOME\pythonOn Windows for UniVerse, UVHOME\pythonOn Linux for UniData, UDTHOME/python/python#.#/site-packagesOn Linux for UniVerse, UVHOME/python/python#.#/site-packagesThe full path of UDTBIN or UVBIN is listed in the u2.pth file so that Python will load it into itssearch path when starting up. The XDEMO's PP directory path is included in the u2.pth file. Do notadd any custom paths to the u2.pth file because this file is overwritten on upgrades.To add your directories containing Python modules to the module search path, place a unique pathconfiguration file with the .pth extension in the appropriate path for your database and platform,listed above. Each path needed is included on a separate line in the custom .pth files. For example,on UniVerse and Windows in the UVHOME/python directory with a file called myprograms.pth,the paths will look \PPThe custom .pth files are not modified on upgrades.Remember: Directory paths and the .pth extensions are case-sensitive on Linux.pyconfig fileFor the UniBasic Python API to find and load the bundled Python library, a .pyconfig file is createdunder the UDTHOME or UVHOME directory.The following two lines are examples of the added code to the .pyconfig file for UniVerse:PYHOME C:\U2\uv113\pythonPYLIB C:\U2\uv113\python\python34.dllThis file is used by U2 servers when it needs to dynamically load the Python library and set it up duringrun time. If you want to try a different version of Python other than the bundled one, you can modifythis file to point to its installation directory and the Python library.Note: You can attempt to use a later version of Python with your installation, but Rocketsupport

Rocket Global Headquarters 77 4th Avenue, Suite 100 Waltham, MA 02451-1468 USA To contact Rocket Software by telephone for any reason, including obtaining pre-sales information and technical support, use one of the following telephone numbers. Country Toll-free telephone number United State