我刚刚开始学习 Django 框架,并尝试在 DigitalOcean 的服务器上部署我的第一个项目。如果我跑
\npython3 manage.py runserver 0.0.0.0:8000\nRun Code Online (Sandbox Code Playgroud)\n服务器启动。但是,一旦我尝试从 (my-rent-ip):8000 访问它,我会得到以下信息:
\n[25/Aug/2021 01:49:01] code 400, message Bad request syntax ('\\x16\\x03\\x01\\x02\\x00\\x01\\x00\\x01\xc3\xbc\\x03\\x03G\xc3\x9b\xc3\xae}\xc3\x98\xc2\xb2\\x921\\x0e\\x94\\x17\\x9c\xc3\x8fe\xc2\xb9\\x88\xc3\xb1\xc3\xbf\xc3\x83\\x16\\x01\xc3\xa9\xc3\x96R\xc3\x9d\\x00\\x95F\\x8aG\\t\xc3\x89 8\xc2\xaf,\xc3\xba\xc3\x82\\x93\xc2\xb4\xc3\xb9\\x06\xc3\x9d\\x14\xc2\xbez\\x13\xc3\x82e4[\\x9a,.\xc3\xa6\\x96+$<~\\x8eq<\xc2\xb4\\t\\x00"ZZ\\x13\\x01\\x13\\x02\\x13\\x03\xc3\x80+\xc3\x80/\xc3\x80,\xc3\x800\xc3\x8c\xc2\xa9\xc3\x8c\xc2\xa8\xc3\x80\\x13\xc3\x80\\x14\\x00\\x9c\\x00\\x9d\\x00/\\x005\\x00')\nRun Code Online (Sandbox Code Playgroud)\n[25/Aug/2021 01:49:01] You're accessing the development server over HTTPS, but it only supports HTTP
如果我运行生产服务器而不是开发服务器,这怎么可能?
\n我可能做错了什么,setting.py因为出于生产目的必须对其进行大量更改。我创建了一个生产分支,更改了settings.py文件,并使用 GitHub 克隆到服务器。这里是:
\nfrom pathlib import Path\n\nfrom dotenv import load_dotenv #for python-dotenv method\nload_dotenv()\n\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# …Run Code Online (Sandbox Code Playgroud) 使用插入数据时,psycopg2我可以使用RETURNING PostgreSQLid语句检索插入的行:
import psycopg2
conn = my_connection_parameters()
curs = conn.cursor()
sql_insert_data_query = (
"""INSERT INTO public.data
(created_by, comment)
VALUES ( %(user)s, %(comment)s )
RETURNING id; # the id is automatically managed by the database.
"""
)
curs.execute(
sql_insert_data_query,
{
"user": 'me',
"comment": 'my comment'
}
)
conn.commit()
data_id = curs.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)
这很好,因为我需要它id来写入其他数据,例如关联表。
但是当有一个大字典要写入 PostgreSQL 时(键是列标识符),依赖 pandas 的DataFrame.to_sql()方法会更方便:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://', creator=my_connection_parameters)
df = pd.DataFrame(my_dict, …Run Code Online (Sandbox Code Playgroud) 我有一个天真的问题,但我注意到通过使用一些 Compose 文件,docker 以表单172.x.0.1为我的项目的所有网络创建网关地址。x通常总是(?)递增(除非重新启动docker服务),从18开始(因为默认桥接网络使用17)直到......一些我在文档中无法弄清楚的数字。之后,docker 跳转到 形式的网关192.168.y.1,在这里,我再次无法弄清楚ydocker 可以使用哪些值范围,以及它在所有这些范围中选择网关地址的策略是什么。
我的强烈印象是它只选择私有IP地址。但我还没有看到诸如 之类的地址10.a.b.c。
任何人都可以向我解释一下,最好有一些官方资源,docker 在创建桥接网络时实际上如何选择网关地址(特别是在 Compose 文件的情况下),docker 可用的所有地址池是什么(以及是否可以手动定义或限制这些范围)?
我查阅的一些页面没有取得太大成功:
https://docs.docker.com/network/
https://docs.docker.com/network/bridge/
https://docs.docker.com/network/network-教程独立/
https://docs.docker.com/compose/networking/
https://github.com/compose-spec/compose-spec/blob/master/spec.md
我在PostgreSQL 文档中找不到是否有办法运行:ALTER TABLE tablename RENAME COLUMN IF EXISTS colname TO newcolname;语句。
我很高兴我们可以,因为我面临的错误取决于谁制作并给了我一个 SQL 脚本,在某些情况下一切都很好(当列的名称错误时,名称实际上会被更改)使用RENAME语句),而在其他情况下则不会(当列已经具有正确的名称时)。
因此,在尝试重命名IF EXISTS列名时使用对列名的语句的想法。如果列已经有了正确的名称(此处cust_date_mean),则应正确跳过必须仅应用于错误名称的重命名命令,并且不会发出以下错误:
db_1 | [223] ERROR: column "cust_mean" does not exist
db_1 | [223] STATEMENT: ALTER TABLE tablename RENAME COLUMN cust_mean TO cust_date_mean;
db_1 | ERROR: column "cust_mean" does not exist
Run Code Online (Sandbox Code Playgroud)
(与此同时,我将与团队澄清事情,因此,如果这样的命令不存在,那也没什么大不了的,但我认为它会有所帮助)。
将 git 修订哈希值 (SHA-1) 存储f844cdc09651448d6c3e765fadac448253a16928到PostgreSQL数据库 (> v.11)中的最高效且有效的方法是什么psycopg2?
我有一个 SHA-1 哈希作为 Python 中的十六进制字符串,我想将其存储在 PostgreSQL 数据库中:
import psycopg2
from subprocess import Popen, PIPE
psycopg2.__version__ # prints '2.9.1 (dt dec pq3 ext lo64)'
cmd_list = [ "git", "rev-parse", "HEAD", ]
process = Popen(cmd_list, stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
git_sha1 = stdout.decode('ascii').strip()
conn = psycopg.connect(**DB_PARAMETERS)
curs = conn.cursor()
sql = """UPDATE table SET git_sha1 = %(git_sha1)s WHERE id=1;"""
curs.execute(
sql,
vars = {
"git_sha1": git_sha1 …Run Code Online (Sandbox Code Playgroud) 我在数据帧列中有一个类似数组的结构作为字符串(我从csv文件中读取数据帧).
此列的一个字符串元素如下所示:
In [1]: df.iloc[0]['points']
Out [2]: '[(-0.0426, -0.7231, -0.4207), (0.2116, -0.1733, -0.1013), (...)]'
Run Code Online (Sandbox Code Playgroud)
所以它真的是一个类似阵列的结构,看起来像我那样"准备好了".
numpy.fromstring()没有帮助,因为它不喜欢括号:
在python中将数组的字符串表示转换为numpy数组
一个简单numpy.array()的字符串本身,如果我复制并粘贴它在array()函数中返回一个numpy数组.
但是如果我array()用包含字符串的变量填充函数:np.array(df.iloc[0]['points'])它不起作用,给我一个ValueError: could not convert string to float
是否有任何功能以简单的方式执行此操作(不替换或正则使用括号)?
我正在尝试从Ubuntu 18.04上的源代码构建Boost库(1.68)。
https://www.boost.org/doc/libs/1_68_0/more/getting_started/unix-variants.html
https://www.boost.org/users/history/version_1_68_0.html
1)对于相同的版本,它等效于sudo apt-get install libboost-all-dev吗?...基本上将安装所有这些部门:
The following NEW packages will be installed:
libboost-all-dev libboost-atomic-dev libboost-atomic1.65-dev libboost-atomic1.65.1 libboost-chrono-dev libboost-chrono1.65-dev
libboost-chrono1.65.1 libboost-container-dev libboost-container1.65-dev libboost-container1.65.1 libboost-context-dev
libboost-context1.65-dev libboost-context1.65.1 libboost-coroutine-dev libboost-coroutine1.65-dev libboost-coroutine1.65.1
libboost-date-time-dev libboost-date-time1.65-dev libboost-exception-dev libboost-exception1.65-dev libboost-fiber-dev
libboost-fiber1.65-dev libboost-fiber1.65.1 libboost-filesystem-dev libboost-filesystem1.65-dev libboost-graph-dev
libboost-graph-parallel-dev libboost-graph-parallel1.65-dev libboost-graph-parallel1.65.1 libboost-graph1.65-dev
libboost-graph1.65.1 libboost-iostreams-dev libboost-iostreams1.65-dev libboost-locale-dev libboost-locale1.65-dev
libboost-log-dev libboost-log1.65-dev libboost-log1.65.1 libboost-math-dev libboost-math1.65-dev libboost-math1.65.1
libboost-mpi-dev libboost-mpi-python-dev libboost-mpi-python1.65-dev libboost-mpi-python1.65.1 libboost-mpi1.65-dev
libboost-mpi1.65.1 libboost-numpy-dev libboost-numpy1.65-dev libboost-numpy1.65.1 libboost-program-options-dev
libboost-program-options1.65-dev libboost-program-options1.65.1 libboost-python-dev libboost-python1.65-dev
libboost-python1.65.1 libboost-random-dev libboost-random1.65-dev libboost-random1.65.1 libboost-regex-dev …Run Code Online (Sandbox Code Playgroud) 是否可以使用 psycopg2 在双游标打开语句中传递多个查询with(首先打开连接,然后游标)?
例如替换:
import psycopg2
def connector():
return psycopg2.connect(**DB_DICT_PARAMS)
########
sql_update1 = ("UPDATE table SET array = %s::varchar[], "
"array_created = true, timestamp = now() AT TIME ZONE 'UTC' "
"WHERE id = %s")
sql_update2 = ("UPDATE table SET json_field = %s "
"WHERE id = %s")
with connector() as conn:
with conn.cursor() as curs:
curs.execute(sql_update1, [stringArray, ID])
with connector() as conn:
with conn.cursor() as curs:
curs.execute(sql_update2, [jsonString, ID])
Run Code Online (Sandbox Code Playgroud)
经过:
#(...)
sql_update1 = ("UPDATE table SET array …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用dpage/pgadmin4:latest位于此处的 docker 映像:https ://hub.docker.com/r/dpage/pgadmin4/
但是当我尝试从 docker 容器内转储服务器设置时,我遇到了困难。
\n这是一个可重现的代码:
\ndocker-compose.yml:
version: \'3.8\'\nservices:\n pgadmin4:\n image: dpage/pgadmin4\n container_name: pgadmin4\n environment:\n - PGADMIN_DEFAULT_EMAIL=postgres@localhost\n - PGADMIN_DEFAULT_PASSWORD="K%)*r7K~57Kcnw"\n - PGADMIN_LISTEN_PORT=8080\n ports:\n - "8080:8080"\n restart: unless-stopped\n network_mode: host\nRun Code Online (Sandbox Code Playgroud)\ndocker-compose pull && docker-compose up --build -d\nRun Code Online (Sandbox Code Playgroud)\n然后从 http://localhost:8080 的 Web 界面设置一些服务器连接,并尝试从容器内部转储它们:
\nversion: \'3.8\'\nservices:\n pgadmin4:\n image: dpage/pgadmin4\n container_name: pgadmin4\n environment:\n - PGADMIN_DEFAULT_EMAIL=postgres@localhost\n - PGADMIN_DEFAULT_PASSWORD="K%)*r7K~57Kcnw"\n - PGADMIN_LISTEN_PORT=8080\n ports:\n - "8080:8080"\n restart: unless-stopped\n network_mode: host\nRun Code Online (Sandbox Code Playgroud)\n然后:
\ndocker-compose pull && …Run Code Online (Sandbox Code Playgroud) 通过pip在 Dockerfile 中安装 Python 包时,例如:
pip install --trusted-host pypi.python.org -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
与requirements.txt,例如:
python-dotenv>=0.15.0
psycopg2>=2.8.6
sqlalchemy>=1.3.22
numpy>=1.19.0
rasterio>=1.1.8
pandas>=1.1.5
geopandas>=0.8.1
matplotlib>=3.3.0
seaborn>=0.11.0
Run Code Online (Sandbox Code Playgroud)
我最近看到这个警告:
WARNING: Running pip as the 'root' user can result in broken permissions
and conflicting behavior with the system package manager.
It is recommended to use a virtual environment
instead: https://pip.pypa.io/warnings/venv
Run Code Online (Sandbox Code Playgroud)
因此,我提出了一个“天真的”问题:
像人们通常在本地计算机上所做的那样,以非 root 用户身份(这是 Docker 中的默认设置)设置虚拟环境/或安装 Python 包是否有意义?
目前我从来不关心这一点,因为我位于一个 Docker 容器内,根据定义,该容器托管一个应用程序,所以我认为这些包全局安装是完全可以的。希望我不会破坏本地机器上的任何东西。
这段带有pandas 1.5.3和sqlalchemy 的 2.0.1代码不再工作,令人惊讶的是,它不会引发任何错误,代码默默地通过:
# python 3.10.6
import pandas as pd # 1.5.3
import psycopg2 # '2.9.5 (dt dec pq3 ext lo64)'
from sqlalchemy import create_engine # 2.0.1
def connector():
return psycopg2.connect(**DB_PARAMS)
engine = create_engine('postgresql+psycopg2://', creator=connector)
with engine.connect() as connection:
df.to_sql(
name='my_table',
con=connection,
if_exists='replace',
index=False,
)
Run Code Online (Sandbox Code Playgroud)
目前,使用 sqlalchemy,2.0.1我的表不再填充 DataFrame 内容。
而它已正确填充 sqlalchemy version 1.4.45。
显然,当我不使用上下文管理器时它会起作用:
connection = engine.connect()
res.to_sql(
name='my_table',
con=connection,
if_exists='replace',
index=False
)
Out[2]: 133 # <- wondering what …Run Code Online (Sandbox Code Playgroud) 在图中,如何找到与节点相连(直接绑定)的边数?
然后,这将是微不足道的,但如果有任何直接方法来找到具有最大边连接的唯一节点,那就太好了。
我正在使用 Python 2.7 和 Networkx。
到目前为止,我正在这样做:
sG = list(nx.connected_component_subgraphs(G)) # sG is a sub_graph of main graph G
nb_sG = len(sub_graphs)
max_con_node = list()
for m in xrange(nb_sG):
sG_nodes = [(node, len(sG[m].edges(node)), sG[m].edges(node)) for node in sG[m].nodes()]
connexions = [i[1] for i in sG_nodes]
idx = [i for i,x in enumerate(connexions) if x==max(connexions)]
max_con_node.append((max(connexions), [sG_nodes[i][0] for i in idx]))
Run Code Online (Sandbox Code Playgroud)
谢谢。
为了在numpy.ndarray中存储许多3D点坐标元组,我在为每个特征输入循环之前初始化一个空的numpy数组.
为此,我目前在进入循环之前执行此操作:
import numpy as np
pointsarrray = np.empty((1,3))
Run Code Online (Sandbox Code Playgroud)
但这会产生一个几乎为空的数组:
array([[ 5.30498948e-315, 0.00000000e+000, 7.81250000e-003]])
Run Code Online (Sandbox Code Playgroud)
在填充pointsarray我的循环之后,我这样做:
pointsarray = np.vstack((pointsarray, [np.array(myPoint)]))
Run Code Online (Sandbox Code Playgroud)
(它也适用于np.append)
我最后需要在退出循环后删除数组的第一行,因为第一行总是包含初始化步骤中的值!
这不是什么大问题,但我想知道是否有一种更清洁的方法来实现一个真正空的阵列,我的意思是; 里面什么都没有(它显示了一行,我无法弄清楚为什么)但是在正确的尺寸?