小编Mah*_*der的帖子

为什么Python CSV阅读器忽略双引号字段?

我认为这可能是一件简单的事情,但经过一个小时的搜索,我没有运气弄清楚我做错了什么.

我正在使用以下代码来读取CSV文件 - 我在读取文件时没有问题,但是当一行包含双引号的字段因为它包含分隔符时,CSV阅读器会忽略双引号并解析字段分为2个单独的字段.

这是我正在使用的代码:

myReader = csv.reader(open(inPath, 'r'), dialect='excel', delimiter=',', quotechar='"')
for row in myReader:
    print row,
    print len(row)
Run Code Online (Sandbox Code Playgroud)

我的意见:

hello, this is row 1, foo1
hello, this is row 2, foo2
goodbye, "this, is row 3", foo3
Run Code Online (Sandbox Code Playgroud)

这给了我:

['hello', ' this is row 1', ' foo1'] 3
['hello', ' this is row 2', ' foo2'] 3
['goodbye', ' "this', ' is row 3"', ' foo3'] 4
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能将双引号字段识别为一个字段?我正在使用python 2.6.1版.

谢谢!

python csv

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

如何使用SQLAlchemy将查询表达式中的SQL文件转储到批量插入到DBMS中?

当我解释问题时,请耐心等待我,我是如何解决这个问题的,最后我的问题是如何改进它.

我有一个来自离线批处理作业的100,000行csv文件,我需要将其作为正确的模型插入到数据库中.通常,如果这是一个相当直接的加载,只需将CSV文件重新设置为适合模式即可轻松加载; 但是,我不得不做一些需要查询的外部处理,使用SQLAlchemy生成我想要的数据会更方便.

我想要的数据是3个模型,它们代表数据库中3个预先存在的表,每个后续模型都依赖于以前的模型.例如:

Model C --> Foreign Key --> Model B --> Foreign Key --> Model A
Run Code Online (Sandbox Code Playgroud)

因此,模型必须按照A,B和C的顺序插入.我想出了一个生产者/消费者的方法:

 - instantiate a multiprocessing.Process which contains a
 threadpool of 50 persister threads that have a threadlocal 
 connection to a database

 - read a line from the file using the csv DictReader

 - enqueue the dictionary to the process, where each thread creates
 the appropriate models by querying the right values and each
 thread persists the models in the appropriate order
Run Code Online (Sandbox Code Playgroud)

这比非线程读取/持久化更快,但它比将文件批量加载到数据库中要慢.大约 …

python performance orm bulkinsert sqlalchemy

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

如何在SQLAlchemy中为PostgreSQL设置事务隔离级别?

我们正在使用SQLAlchemy声明基础,我有一个方法,我想隔离事务级别.为了解释,有两个进程同时写入数据库,我必须让它们在事务中执行它们的逻辑.默认事务隔离级别是READ COMMITTED,但我需要能够使用SERIALIZABLE隔离级别执行一段代码.

这是如何使用SQLAlchemy完成的?现在,我基本上在我们的模型中有一个方法,它继承自SQLAlchemy的声明性基础,基本上需要以事务方式调用.

from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
from psycopg2.extensions import ISOLATION_LEVEL_READ_COMMITTED
from psycopg2.extensions import ISOLATION_LEVEL_SERIALIZABLE

class OurClass(SQLAlchemyBaseModel):

    @classmethod
    def set_isolation_level(cls, level=ISOLATION_LEVEL_SERIALIZABLE):
        cls.get_engine().connect().connection.set_isolation_level(level)

    @classmethod
    def find_or_create(cls, **kwargs):
        try:
            return cls.query().filter_by(**kwargs).one()
        except NoResultFound:
            x = cls(**kwargs)
            x.save()
            return x
Run Code Online (Sandbox Code Playgroud)

我这样做是为了使用事务隔离级别来调用它,但它没有按照我的预期进行.隔离级别仍然是我在postgres日志中看到的READ COMMITTED.有人可以帮助确定我做错了什么吗?

我正在使用SQLAlchemy 0.5.5

class Foo(OurClass):

    def insert_this(self, kwarg1=value1):
        # I am trying to set the isolation level to SERIALIZABLE
        try:
            self.set_isolation_level()
            with Session.begin():
                self.find_or_create(kwarg1=value1)
        except Exception:  # if any exception is thrown...
            print "I caught an expection."
            print sys.exc_info()
        finally:
            # Make …
Run Code Online (Sandbox Code Playgroud)

python postgresql transactions sqlalchemy isolation-level

10
推荐指数
1
解决办法
7567
查看次数

有哪些策略可以与开发人员团队维护通用数据库架构而没有DBA?

我很好奇其他人如何在没有DBA的情况下解决了许多(10+)开发人员维护和同步数据库更改的问题?我的意思是,基本上,如果有人想要对数据库进行更改,那么采取哪些策略呢?(即我已经创建了一个'Car'模型,现在我想将适当的DDL应用于数据库等.)

我们主要是一个Python商店,我们的ORM是SQLAlchemy.以前,我们用这样的方式编写了我们的模型来使用我们的ORM创建模型,但是我们最近放弃了这个模型,因为:

  • 我们无法使用ORM跟踪更改
  • ORM的状态与数据库不同步(例如,主要与索引和唯一约束相关的许多差异)
  • 除非开发人员通过电子邮件向团队记录数据库更改,否则无法审核数据库更改.

我们解决这个问题的方法是基本上有一个"看门人",他会检查数据库中的每个更改,并将所有接受的数据库更改应用到accepted_db_changes.sql文件中,从而需要进行任何数据库更改的开发人员将他们的请求放入proposed_db_changes.sql文件中.我们检查这个文件,并且,当它更新时,我们都将更改应用到我们的开发机器上的个人数据库.我们不在模型上创建索引或约束,它们明确地应用于数据库.

我想知道维护数据库模式的一些策略是什么,如果我们看起来合理的话.

谢谢!

python database postgresql sqlalchemy database-schema

9
推荐指数
1
解决办法
867
查看次数

使用gevent访问外部http服务时出现间歇性问题

首先,版本:

  • gevent - v0.13.7
  • gunicorn - v0.14.2
  • 请求 - 0.11.2

我们最近升级了在gunicorn后面运行的服务器,以使用gevent异步工作程序而不仅仅是普通的同步工作程序.一切都很好,但我们现在遇到一个问题,试图通过http访问第三方服务,我只是不知道如何追踪可能是什么问题.

简短的堆栈跟踪如下所示:

File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/sessions.py", line 295, in post
  return self.request('post', url, data=data, **kwargs)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/sessions.py", line 252, in request
  r.send(prefetch=prefetch)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/models.py", line 625, in send
  raise ConnectionError(sockerr)
ConnectionError: [Errno 66] unknown
Run Code Online (Sandbox Code Playgroud)

另一个不同的堆栈跟踪但我们认为它是同一个问题:

File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 94, in connect
  sock = socket.create_connection((self.host, self.port), self.timeout)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/gevent/socket.py", line 637, in create_connection
  for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/gevent/socket.py", line 769, in getaddrinfo
  raise
DNSError: [Errno 66] unknown
Run Code Online (Sandbox Code Playgroud)

起初,我以为这可能是潜在的东西相关的libevent-dns …

python exception gevent gunicorn python-requests

8
推荐指数
1
解决办法
1155
查看次数

在尊重访问控制的同时为REST API序列化SQLAlchemy模型?

目前,我们以及大多数Web框架的序列化工作方式是某种类型的方法调用,它将模型转换为某种类型的格式.在我们的例子中,我们to_dict()在每个模型上都有一个方法,它构造并返回一个键值字典,其中键是字段名,值是实例变量.

在我们的代码中,我们都有以下代码片段:json.dumps(**some_model_object.to_dict())将序列化为some_model_objectjson.最近,我们决定向用户公开一些内部资源,但是如果请求用户不是超级用户,则其中一些资源具有我们不希望在序列化期间传回的特定私有实例值.

我试图想出一个简洁的设计,允许更容易的序列化,以及允许我们序列化为json以外的格式.我认为这是面向方面设计/编程的一个非常好的用例,其中方面尊重请求访问控制并基于请求用户的持久性来序列化对象.

这是类似于我现在的东西:

from framework import current_request


class User(SQLAlchemyDeclarativeModel):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    first_name = Column(Unicode(255))
    last_name = Column(Unicode(255))
    private_token = Column(Unicode(4096))

    def to_dict(self):
        serialized = dict((column_name, getattr(self, column_name))
                          for column_name in self.__table__.c.keys())

        # current request might not be bound yet, could be in a unit test etc.
        if current_request and not current_request.user.is_superuser():
            # we explicitly define the allowed items because if we accidentally add
            # a private variable to …
Run Code Online (Sandbox Code Playgroud)

python aop serialization

7
推荐指数
1
解决办法
3831
查看次数

如果不存在所需的安装包,如何告诉Chef采取操作?

我正在努力让厨师执行以下操作:

  • 检查是否有所需的debian(可以是任何包)
  • 如果是,apt-get安装包
  • 如果不是,请使用源构建包

我知道你可以这样做:

remote_file "some remote file" do
  ...
  not_if "apt-cache search 'mypackage'"
end
Run Code Online (Sandbox Code Playgroud)

但是,我尝试过:

ruby_block "Attempting to install #{node[:bact][:application_name]}" do
  block do
    cmd = Chef::ShellOut.new("apt-get install -y --force-yes #{node[:bact][:application_name]}")
    exec_result = cmd.run_command
    if exec_result.exitstatus != 0
      Chef::Log.info 'Go grab some coffee, this might be a while....'
      resources("execute[install-#{node[:bact][:application_name]}-via-pip]").run_action(:run)
    end
  end
  action :create
end
Run Code Online (Sandbox Code Playgroud)

有没有更简单,更简单的方法来做到这一点?

基本上,我理想的做法是:

begin
   package 'some-package-name' do
     action :install
   done
rescue Chef::Exception
   # Do something here
end
Run Code Online (Sandbox Code Playgroud)

apt chef-infra chef-recipe

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

我只是想知道瓶子是如何工作的.当我运行以下代码时,它以导入错误结束:无法导入名称获取.pls帮助我

from bottle import get, post, request

#@route('/login')
@get('/login')
def login_form():
    return '''<form method="POST">
                <input name="name"     type="text" />
                <input name="password" type="password" />
              </from>'''

#@route('/login', method='POST')
@post('/login')
def login_submit():
    name     = request.forms.get('name')
    password = request.forms.get('password')
    if check_login(name, password):
        return "<p>Your login was correct</p>"
    else:
        return "<p>Login failed</p>"
Run Code Online (Sandbox Code Playgroud)

python bottle

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