{ "info": { "author": "John Shojaei", "author_email": "titan550@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: SQL", "Topic :: Database" ], "description": "# bcpy\n\n\n\n \n \n\n\n \n \n\n\n \n \n\n
Latest Release\n \n \"latest\n \n
License\n \n \"license\"\n \n
Build Status (master)\n \n \"travis\n \n
\n\n## What is it?\n\nThis package is a wrapper for Microsoft's SQL Server bcp utility. Current database drivers available in Python are not fast enough for transferring millions of records (yes, I have tried [pyodbc fast_execute_many](https://github.com/mkleehammer/pyodbc/wiki/Features-beyond-the-DB-API#fast_executemany)). Despite the IO hits, the fastest option by far is saving the data to a CSV file in file system (preferably /dev/shm tmpfs) and using the bcp utility to transfer the CSV file to SQL Server.\n\n## How Can I Install It?\n\nYou can download and install this package from PyPI repository by running the command below.\n\n```bash\npip install bcpy\n```\n\n## Examples\n\nFollowing examples show you how to load (1) flat files and (2) DataFrame objects to SQL Server using this package.\n\n### Flat File\n\nFollowing example assumes that you have a comma separated file with no qualifier in path 'tests/data1.csv'. The code below sends the the file to SQL Server.\n\n```python\nimport bcpy\n\n\nsql_config = {\n 'server': 'sql_server_hostname',\n 'database': 'database_name',\n 'username': 'test_user',\n 'password': 'test_user_password1234'\n}\nsql_table_name = 'test_data1'\ncsv_file_path = 'tests/data1.csv'\nflat_file = bcpy.FlatFile(qualifier='', path=csv_file_path)\nsql_table = bcpy.SqlTable(sql_config, table=sql_table_name)\nflat_file.to_sql(sql_table)\n```\n\n### DataFrame\n\nThe following example creates a DataFrame with 100 rows and 4 columns populated with random data and then it sends it to SQL Server.\n\n```python\nimport bcpy\nimport numpy as np\nimport pandas as pd\n\n\nsql_config = {\n 'server': 'sql_server_hostname',\n 'database': 'database_name',\n 'username': 'test_user',\n 'password': 'test_user_password1234'\n}\ntable_name = 'test_dataframe'\ndf = pd.DataFrame(np.random.randint(-100, 100, size=(100, 4)),\n columns=list('ABCD'))\nbdf = bcpy.DataFrame(df)\nsql_table = bcpy.SqlTable(sql_config, table=table_name)\nbdf.to_sql(sql_table)\n```\n\n## Requirements\n\nYou need a working version of Microsoft bcp installed in your system. Your PATH environment variable should contain the directory of the bcp utility. Following are the installation tutorials for different operating systems.\n\n- [Dockerfile (Ubuntu 18.04)](./bcp.Dockerfile)\n- [Linux](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)\n- [Mac](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools?view=sql-server-2017#macos)\n- [Windows](https://docs.microsoft.com/en-us/sql/tools/bcp-utility)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/titan550/bcpy", "keywords": "bcp mssql", "license": "", "maintainer": "", "maintainer_email": "", "name": "bcpy", "package_url": "https://pypi.org/project/bcpy/", "platform": "", "project_url": "https://pypi.org/project/bcpy/", "project_urls": { "Homepage": "https://github.com/titan550/bcpy" }, "release_url": "https://pypi.org/project/bcpy/0.1.5/", "requires_dist": null, "requires_python": "", "summary": "Microsoft SQL Server bcp (Bulk Copy) wrapper", "version": "0.1.5" }, "last_serial": 5647270, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "6ce43cde453cf3f1c193e545147b6292", "sha256": "88dfb6cd573d7ef47750025a693d4729b98e1858114e45418ea9364cbceba4c0" }, "downloads": -1, "filename": "bcpy-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6ce43cde453cf3f1c193e545147b6292", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2605, "upload_time": "2019-02-24T05:50:36", "url": "https://files.pythonhosted.org/packages/4d/20/bbf20baa3b52397bf50fbbe8160d74fc058608a4e16ae5b11863f48772b4/bcpy-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c985ca708b1088592af67c6bb4acf8a8", "sha256": "3715d742f62e59c403ff416eed157ca8820b28c4b11a3e207bbdbe2226aab53e" }, "downloads": -1, "filename": "bcpy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c985ca708b1088592af67c6bb4acf8a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1561, "upload_time": "2019-02-24T05:50:39", "url": "https://files.pythonhosted.org/packages/21/dc/83dd003a8aba417276a59a3139457aedb2a145494d68ab31367cc563e945/bcpy-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "3bbdb48a6413a2514e3d31a9910e8e77", "sha256": "d5be78ad414431501845ad6b04901f5056d791479c9b141534a0ab6fb0dc9106" }, "downloads": -1, "filename": "bcpy-0.0.2.tar.gz", "has_sig": false, "md5_digest": "3bbdb48a6413a2514e3d31a9910e8e77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1916, "upload_time": "2019-02-24T15:08:02", "url": "https://files.pythonhosted.org/packages/27/1a/72efd0c744d6a98c46fb2471ffcca82a226b3db92f11693fc782455118a2/bcpy-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "3642b41a3e610685ddf9c6298af25595", "sha256": "7e1aa151e8898824adab94ad4c1bc07bc783d8421b2e82bf59cd589c8091d872" }, "downloads": -1, "filename": "bcpy-0.0.3.tar.gz", "has_sig": false, "md5_digest": "3642b41a3e610685ddf9c6298af25595", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1845, "upload_time": "2019-02-24T16:40:28", "url": "https://files.pythonhosted.org/packages/4d/4b/cab706b3156f10b8f7e1214469748d442cfe2740c219df179c24c3f47874/bcpy-0.0.3.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "cfcb89b4c2d69aae83850eeaf576d3f0", "sha256": "e6158b1a4c0410600677bcff06ebfff7e14b432cd282207fbbb57f7e579d7f89" }, "downloads": -1, "filename": "bcpy-0.0.5.tar.gz", "has_sig": false, "md5_digest": "cfcb89b4c2d69aae83850eeaf576d3f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1845, "upload_time": "2019-02-24T16:52:48", "url": "https://files.pythonhosted.org/packages/d0/1f/0962e5d04135f9a27328a19344cbe6a866751d61dfb636388dd957c25ee9/bcpy-0.0.5.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "7f57ecb7c7b99b85fe2b3f4f7d553bf6", "sha256": "5b32ea5aeb33e26167716cafb635c2921a0bb5c8dd1cd94dc50ec2b70f6f11fc" }, "downloads": -1, "filename": "bcpy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "7f57ecb7c7b99b85fe2b3f4f7d553bf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8341, "upload_time": "2019-05-07T01:07:15", "url": "https://files.pythonhosted.org/packages/93/31/3702ccb38a07bfad7639c9d007e211a4b0a7701f96b669ad34b487df6b0e/bcpy-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "89a4f9aa113519548996a0da0eaa13cc", "sha256": "7415a27486db6222db42ca314035550bd98d1b8c9857a8b67663e695740dce3f" }, "downloads": -1, "filename": "bcpy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "89a4f9aa113519548996a0da0eaa13cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8468, "upload_time": "2019-05-09T05:01:17", "url": "https://files.pythonhosted.org/packages/3e/1d/bef0c04259533930ca1ed965c9aaffbdacda3a40ca2422ef625897193e09/bcpy-0.1.1.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "7b952a0867a1c6a61b2929feee5919d2", "sha256": "c3917be012b1de80f9c639a7b1db3742507119a57c47831ecd6f099ae73c3b1b" }, "downloads": -1, "filename": "bcpy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "7b952a0867a1c6a61b2929feee5919d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8468, "upload_time": "2019-05-09T05:25:37", "url": "https://files.pythonhosted.org/packages/89/b0/a4afa33039a7d406caa918ad15783267ccc5fc8fc25bdaae5748108faab1/bcpy-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "3c26adefefd9735112e61ef3b257a27b", "sha256": "6f15c54325ccdb8db9dbb25278738ea8fa1297d50c88beb55b5a6508a00cb977" }, "downloads": -1, "filename": "bcpy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "3c26adefefd9735112e61ef3b257a27b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8560, "upload_time": "2019-08-07T22:31:23", "url": "https://files.pythonhosted.org/packages/13/24/735847e827f09221200b1bfde8a66d74f9dfb6ba816c579c56bdad5ccbdb/bcpy-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3c26adefefd9735112e61ef3b257a27b", "sha256": "6f15c54325ccdb8db9dbb25278738ea8fa1297d50c88beb55b5a6508a00cb977" }, "downloads": -1, "filename": "bcpy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "3c26adefefd9735112e61ef3b257a27b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8560, "upload_time": "2019-08-07T22:31:23", "url": "https://files.pythonhosted.org/packages/13/24/735847e827f09221200b1bfde8a66d74f9dfb6ba816c579c56bdad5ccbdb/bcpy-0.1.5.tar.gz" } ] }