我有一些代码,我尝试写入数据库,并在某些情况下由于唯一性约束得到(预期)完整性错误.我试图抓住错误,但由于一些神秘的原因,我不能.我的代码看起来像这样(在循环中运行,为简单起见而简化):
from psycopg2 import IntegrityError
try:
data = {
'one': val1,
'two': val2
}
query=tablename.insert().values(data)
target_engine.execute(query)
except IntegrityError as e:
print "caught"
except Exception as e:
print "uncaught"
print e
break
Run Code Online (Sandbox Code Playgroud)
运行脚本时的输出如下所示:
uncaught
(psycopg2.IntegrityError) duplicate key value violates unique constraint "companies_x_classifications_pkey"
DETAIL: Key (company_id, classification_id)=(37802, 304) already exists.
[SQL: 'INSERT INTO companies_x_classifications (company_id, classification_id) VALUES (%(company_id)s, %(classification_id)s)'] [parameters: {'classification_id': 304, 'company_id': 37802L}]
Run Code Online (Sandbox Code Playgroud)
它甚至从未打印过"抓住",所以它并不认为我有完整的错误.然而,当我打印错误时,这是一个完整性错误.任何帮助将不胜感激!
我在Python2中有这个代码段:
def super_cool_method():
con = psycopg2.connect(**connection_stuff)
cur = con.cursor(cursor_factory=DictCursor)
cur.execute("Super duper SQL query")
rows = cur.fetchall()
for row in rows:
# do some data manipulation on row
return rows
Run Code Online (Sandbox Code Playgroud)
我想写一些单元测试.我想知道如何使用mock.patch它来修补光标和连接变量,以便它们返回一组伪造的数据?我为我的单元测试尝试了以下代码段,但无济于事:
@mock.patch("psycopg2.connect")
@mock.patch("psycopg2.extensions.cursor.fetchall")
def test_super_awesome_stuff(self, a, b):
testing = super_cool_method()
Run Code Online (Sandbox Code Playgroud)
但我似乎得到以下错误:
TypeError: can't set attributes of built-in/extension type 'psycopg2.extensions.cursor'
Run Code Online (Sandbox Code Playgroud) 我需要将以下代码升级为基于psycopg版本 3 的等效代码:
import psycopg2
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://', creator=connector)
Run Code Online (Sandbox Code Playgroud)
这个 psycopg2 URL 很有魅力,但是:
import psycopg # v3.1
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg://', creator=connector)
Run Code Online (Sandbox Code Playgroud)
(我也尝试过“psycopg3”这个词但没有成功)
返回:
Traceback (most recent call last):
File "/tmp/ipykernel_1032556/253047102.py", line 1, in <cell line: 1>
engine = create_engine('postgresql+psycopg://', creator=connector)
File "<string>", line 2, in create_engine
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/deprecations.py", line 309, in warned
return fn(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/create.py", line 534, in create_engine
entrypoint = u._get_entrypoint()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/url.py", line 661, in _get_entrypoint …Run Code Online (Sandbox Code Playgroud) 我在Python中使用Psycopg2来访问PostgreSQL数据库.我很好奇是否可以安全地使用with closing()模式来创建和使用游标,或者我应该使用显式try/except包装查询.我的问题是关于插入或更新,以及交易.
据我所知,所有Psycopg2查询都发生在一个事务中,并且由调用代码来提交或回滚事务.如果在with closing(...块内发生错误,是否发出回滚?在旧版本Psycopg2的,回滚被明确发出close(),但不是这种情况了(见http://initd.org/psycopg/docs/connection.html#connection.close).
通过一个例子,我的问题可能更有意义.这是一个使用的例子with closing(...
with closing(db.cursor()) as cursor:
cursor.execute("""UPDATE users
SET password = %s, salt = %s
WHERE user_id = %s""",
(pw_tuple[0], pw_tuple[1], user_id))
module.rase_unexpected_error()
cursor.commit()
Run Code Online (Sandbox Code Playgroud)
当module.raise_unexpected_error()引发错误时会发生什么?交易是否回滚?据我了解事务,我要么提交它们要么回滚它们.那么在这种情况下,会发生什么?
或者我可以这样写我的查询:
cursor = None
try:
cursor = db.cursor()
cursor.execute("""UPDATE users
SET password = %s, salt = %s
WHERE user_id = %s""",
(pw_tuple[0], pw_tuple[1], user_id))
module.rase_unexpected_error()
cursor.commit()
except BaseException:
if cursor is not None:
cursor.rollback()
finally:
if cursor is not None: …Run Code Online (Sandbox Code Playgroud) 我在执行copy命令时遇到问题,无法从S3将数据从S3加载到Amazon的Redshift.
我有以下复制命令:
copy moves from 's3://<my_bucket_name>/moves_data/2013-03-24/18/moves'
credentials 'aws_access_key_id=<key_id>;aws_secret_access_key=<key_secret>'
removequotes
delimiter ',';
Run Code Online (Sandbox Code Playgroud)
当我使用SQL Workbench/j执行此命令时,一切都按预期工作,但是当我尝试使用python和psycopg2执行此命令时,命令传递OK但没有加载数据且没有抛出错误.
尝试了以下两个选项(假设psycopg2连接正常,因为它是):
cursor.execute(copy_command)
cursor.copy_expert(copy_command, sys.stdout)
Run Code Online (Sandbox Code Playgroud)
两者都没有发出警告,但未加载数据
想法?
谢谢
我试图使用psycopg2我的postgresql数据库只是在我的本地机器上运行无法让它返回结果无论我尝试什么.它似乎连接到数据库确定,因为如果我改变任何配置参数它会抛出错误,但是,当我运行看似有效和结果有价值的查询时,我什么也得不到.
我的数据库正在运行,并且肯定有一个表:
postgres=# \c
You are now connected to database "postgres" as user "postgres".
postgres=# select * from foos;
name | age
---------+-----
Sarah | 23
Michael | 35
Alice | 12
James | 20
John | 52
(5 rows)
Run Code Online (Sandbox Code Playgroud)
我的python代码连接到这个数据库,但无论我运行什么查询,我得到None:
Python 2.7.3 (default, Apr 10 2013, 06:20:15)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost'")
>>> cur = conn.cursor()
>>> print …Run Code Online (Sandbox Code Playgroud) 我在Windows 7 64位.我有一个csv文件'data.csv'.我想通过python脚本将数据导入postgresql表'temp_unicommerce_status'.
我的剧本是:
import psycopg2
conn = psycopg2.connect("host='localhost' port='5432' dbname='Ekodev' user='bn_openerp' password='fa05844d'")
cur = conn.cursor()
cur.execute("""truncate table "meta".temp_unicommerce_status;""")
cur.execute("""Copy temp_unicommerce_status from 'C:\Users\n\Desktop\data.csv';""")
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
Traceback (most recent call last):
File "C:\Users\n\Documents\NetBeansProjects\Unicommerce_Status_Update\src\unicommerce_status_update.py", line 5, in <module>
cur.execute("""Copy temp_unicommerce_status from 'C:\\Users\\n\\Desktop\\data.csv';""")
psycopg2.ProgrammingError: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
Run Code Online (Sandbox Code Playgroud) 我正在使用Docker来"容纳"PostgreSQL部署.我可以通过命令行启动容器并连接到PostgreSQL,如下所示:
minime2@CEBERUS:~/Projects/skunkworks$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc176901052a df:pg "docker-entrypoint..." About an hour ago Up About an hour 5432/tcp vigilant_agnesi
minime2@CEBERUS:~/Projects/skunkworks$ CONTAINER_ID=dc176901052a
minime2@CEBERUS:~/Projects/skunkworks$ IP=$(docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' $CONTAINER_ID)
minime2@CEBERUS:~/Projects/skunkworks$ echo $IP
172.17.0.2
minime2@CEBERUS:~/Projects/skunkworks$ docker exec -it vigilant_agnesi psql -U postgres -W cookiebox
Passwod for user postgres:
psql (9.6.5)
Type "help" for help
cookiebox#
Run Code Online (Sandbox Code Playgroud)
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information. …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我从PostgreSQL服务器获得的一些数据创建一个图形图,但是当我尝试图形时我收到一个错误:"TypeError:'DataFrame'类型的对象不是JSON可序列化的"
这是迄今为止的代码:
import dash
import numpy as np
import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
import psycopg2 as pg2
import datetime
conn = pg2.connect(database='X',user='X',password=secret)
cur = conn.cursor()
cur.execute("SELECT * FROM times;")
a = cur.fetchall()
str(a)
df = pd.DataFrame([[ij for ij in i] for i in a])
df.to_json()
df.rename(columns={0: "Serial Number", 1: "Status", 2: "Date", 3: "Time", 4: "Number"}, inplace=True);
x = df["Date"]
data = [go.Scatter(
x=x,
y=df["Status"])]
layout = go.Layout(title="Server Data Visualization",
xaxis = dict( …Run Code Online (Sandbox Code Playgroud) 尝试安装时出现以下错误psycopg2:
(venv) root@scw-determined-panini:/app# pip install psycopg2
Collecting psycopg2
Using cached https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647/psycopg2-2.8.5.tar.gz
Building wheels for collected packages: psycopg2
Running setup.py bdist_wheel for psycopg2 ... error
Complete output from command /app/venv/bin/python3.8 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-psll6xe_/psycopg2/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp52or8xexpip-wheel- --python-tag cp38:
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.8
creating build/lib.linux-x86_64-3.8/psycopg2
copying lib/_json.py -> build/lib.linux-x86_64-3.8/psycopg2
copying lib/pool.py -> build/lib.linux-x86_64-3.8/psycopg2
copying lib/tz.py -> build/lib.linux-x86_64-3.8/psycopg2
copying lib/_lru_cache.py -> build/lib.linux-x86_64-3.8/psycopg2
copying lib/_ipaddress.py -> build/lib.linux-x86_64-3.8/psycopg2
copying lib/extensions.py …Run Code Online (Sandbox Code Playgroud) psycopg2 ×10
python ×9
postgresql ×5
python-3.x ×2
sqlalchemy ×2
docker ×1
mocking ×1
pandas ×1
pip ×1
plotly ×1
psycopg3 ×1
python-2.7 ×1
python-wheel ×1
unit-testing ×1