标签: psycopg2

psycopg2与服务器断开连接

我一直在解决这个问题.我设置了一台全新的机器.我已经安装了postgresql和我所有其他依赖项的新副本.基本上,我随机地将这些数据库断开连接.我可以执行相同的请求,无论是有效还是无效.外观非常不确定.在Postgresql上查看日志,它甚至没有连接.现在,我希望如果它从未连接过,我会在建立连接并获取光标时遇到此问题,但是我在以后尝试实际使用连接时会得到它.鉴于下面的回溯,我希望看到在pg日志中建立连接,然后由于某种原因断开连接.我没有,所以我想知道是否有一些不匹配的线索.

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/core/handlers/wsgi.py", line 242, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/core/handlers/base.py", line 73, in get_response
    response = middleware_method(request)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/middleware/locale.py", line 16, in process_request
    language = translation.get_language_from_request(request)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/utils/translation/__init__.py", line 97, in get_language_from_request
    return real_get_language_from_request(request)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/utils/translation/trans_real.py", line 349, in get_language_from_request
    lang_code = request.session.get('django_language', None)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 63, in get
    return self._session.get(key, default)
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 172, in _get_session
    self._session_cache = self.load()
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/contrib/sessions/backends/db.py", line 16, in load
    expire_date__gt=datetime.datetime.now()
  File "/usr/local/lib/python2.6/dist-packages/Django-1.1-py2.6.egg/django/db/models/manager.py", line 120, …
Run Code Online (Sandbox Code Playgroud)

python database django postgresql psycopg2

12
推荐指数
1
解决办法
1万
查看次数

使用Python INSERT INTO和String Concatenation

在将数据插入我的数据库时,我遇到了一个重大的速度障碍.您可以从下面的代码中看到,我只是构建SQL语句以传递给execute命令.值是正确的,一切都很好,但python解释器似乎是在运行时添加和删除params中的引号.

这是将空间数据插入数据库的正确方法.

INSERT INTO my_table(
            name, url, id, point_geom, poly_geom)
    VALUES ('test', 'http://myurl', '26971012', 
            ST_GeomFromText('POINT(52.147400 19.050780)',4326), 
            ST_GeomFromText('POLYGON(( 52.146542 19.050557, bleh, bleh, bleh))',4326));
Run Code Online (Sandbox Code Playgroud)

这在Postgres查询编辑器中是可验证的......现在,当我在下面运行Python代码时,它会在ST_GeomFromText函数周围添加双引号,然后从id列中删除引号.

INSERT INTO my_table(
            name, url, id, point_geom, poly_geom)
    VALUES ('test', 'http://myurl', 26971012, 
     "ST_GeomFromText('POINT(52.147400 19.050780)',4326)", 
     "ST_GeomFromText('POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)");
Run Code Online (Sandbox Code Playgroud)

这导致插入失败,PostGIS声称它不是一个合适的几何.当我打印每个参数在屏幕上查看时,引号没有什么好玩的,所以我认为问题必须在执行命令中.我正在使用Python 2.7 ...任何人都可以帮助如何防止这种疯狂继续下去?

    conn = psycopg2.connect('dbname=mydb user=postgres password=password')
    cur = conn.cursor()
    SQL = 'INSERT INTO my_table (name, url, id, point_geom, poly_geom) VALUES (%s,%s,%s,%s,%s);'
    Data = name, url, id, point, polygon …
Run Code Online (Sandbox Code Playgroud)

python postgis psycopg2

11
推荐指数
1
解决办法
5714
查看次数

使用psycopg2库复制命令

是否可以通过psycopg2运行以下命令?如果是这样,我该怎么办?

COPY table_name(col1,col2) FROM 'path/to/file.csv' WITH HEADER DELIMITER ',' CSV;
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2

11
推荐指数
2
解决办法
1万
查看次数

Python psycopg2检查行存在

在Python psycopg2中如何检查是否存在行?

def track_exists(self, track_id):
    cur = self.conn.cursor()
    cur.execute("SELECT fma_track_id FROM tracks WHERE fma_track_id = %s", (track_id,))
    if cur.fetchall() > 0:
        return true
    else:
        return false
Run Code Online (Sandbox Code Playgroud)

目前我正在接受

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mumu.py", line 38, in track_exists
if cur.fetchall() > 0:
TypeError: 'NoneType' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

python sql postgresql psycopg2

11
推荐指数
3
解决办法
1万
查看次数

安装psycopg2时出现致命错误

我使用Python 3使用virtualenvwrapper创建了一个虚拟环境.

mkvirtualenv foo -p /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

我试图pip安装psycopg2并得到以下错误:

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我有最新版本的python-dev.我可以psycopg2使用Python 2 成功安装virtualenv.

使用Python 3在virtualenv中安装它的诀窍是什么?

psycopg2 virtualenv python-3.3

11
推荐指数
1
解决办法
3712
查看次数

从psycopg2异常中获取错误消息

这是我第一个广泛使用psycopg2的项目.我试图找到一种方法来提取psql错误消息,无论何时连接尝试失败.我已经测试过,如果所有变量都设置正确,下面的代码就可以工作,但是每当出现错误情况时(例如用户选择不存在的数据库),Python会给我以下内容:

I am unable to connect to the database
None
Traceback (most recent call last):
  File "./duplicate_finder.py", line 163, in <module>
    main(sys.argv[1:])
  File "./duplicate_finder.py", line 142, in main
    print e.diag.message_detail
AttributeError: 'OperationalError' object has no attribute 'diag'
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的catch-all方法来捕获psql在连接失败时生成的任何错误消息,或者我是否需要编写除多个psycopg2异常的块之外的其他消息?

从我的脚本中提取:

import sys, getopt, os, time, csv, psycopg2

    ...
    ...

    conn_string = "host=" + dbhost + " dbname=" + database + " user=" + dbuser + " password=" + dbpass
    try:
        conn = psycopg2.connect(conn_string)
    except psycopg2.Error as e:
        print "Unable to connect!" …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2

11
推荐指数
3
解决办法
3万
查看次数

通过psycopg2获取警告消息

我想通过psycopg2调用plpgsql函数并查看警告消息.即,我有这个功能:

create or replace function test_warning() returns void as $$
begin
raise warning 'this is only a test';
end; 
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

并在python中调用它:

import psycopg2
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.callproc("test_warning")
# or so:
cursor.execute('SELECT test_warning()')
Run Code Online (Sandbox Code Playgroud)

不幸的是,plpgsql中定义的警告消息不会出现在python输出中的任何位置.有没有办法在python输出中打印警告消息?

python postgresql psycopg2

11
推荐指数
2
解决办法
3615
查看次数

如何安装pg_config错误的psycopg2?

我已经尝试从此站点安装psycopg2(PostgreSQL数据库adapater),但是当我尝试将CD装入软件包并写入后进行安装时

python setup.py install 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Please add the directory containing pg_config to the PATH

or specify the full executable path with the option:

python setup.py build_ext --pg-config /path/to/pg_config build ...

or with the pg_config option in 'setup.cfg'.
Run Code Online (Sandbox Code Playgroud)

我也尝试过“ sudo pip install psycopg2”,并且得到了相同的消息。

阅读完文档后,它要求查看setup.cfg文件(如下):

[build_ext]
define=

# PSYCOPG_DISPLAY_SIZE enable display size calculation (a little slower)
# HAVE_PQFREEMEM should be defined on PostgreSQL >= 7.4
# PSYCOPG_DEBUG can be added to enable verbose debug information

# "pg_config" is …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2

11
推荐指数
5
解决办法
2万
查看次数

psycopg2:游标已经关闭

我在用psycopg2 2.6.1.我有一堆查询需要按顺序执行.

conn = psycopg2.connect(database=redshift_database,
                        user=redshift_user,
                        password=os.environ.get("PGPASSWORD"),
                        host=redshift_cluster,
                        port=redshift_port)
cursor = conn.cursor()

queries = [q1, q2, q3....] ## a list of queries 
for query in queries:
    try:
        cursor.execute(query)
    except:
        print e.message
Run Code Online (Sandbox Code Playgroud)

假设q1失败了SSL connection has been closed unexpectedly.然后我的其余查询也失败了cursor already closed.如何确保如果一个查询失败,则可以成功执行以下查询.

python postgresql psycopg2

11
推荐指数
2
解决办法
1万
查看次数

ImproperlyConfigured(“加载 psycopg2 模块时出错:%s” % e)

目前在 MacOS Monterey 上使用 Django 4.0 和 Python 3.10.0。运行命令后

python3 manage.py runserver
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/tonyingle/.local/share/virtualenvs/total-weather-backend-nYZrqAi-/lib/python3.10/site-packages/psycopg2/_psycopg.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '_PQbackendPID'
Run Code Online (Sandbox Code Playgroud)

我已经在 Pipenv shell 及其外部安装了 pyscopg2 和 psycog2-binary。奇怪的是,一切都工作正常,直到我意识到我必须配置我的 settings.py 文件来解决我的 cors 问题,然后一切都变得混乱。

也许settings.py中的一些相关设置

ALLOWED_HOSTS = [
    "https://total-weather-backend.herokuapp.com/", "http://127.0.0.1:8000/"]

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api',
    'rest_framework',
    'djoser',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

DATABASES = { …
Run Code Online (Sandbox Code Playgroud)

python django psycopg2

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

psycopg2 ×10

python ×9

postgresql ×7

django ×2

database ×1

postgis ×1

python-3.3 ×1

sql ×1

virtualenv ×1